好的我觉得我已经正确设置了这个但是当我提出这个ajax请求时我仍然得到零回归,我觉得这可能是一个错字,而且我无法看到它的原因?
这是我的php类文件:
class class2 extends class1
{
public static function init()
{
$class = __CLASS__;
new $class;
}
public function __construct()
{
wp_enqueue_script('empty-ad-check', plugins_url('mc-error-alerts/js/mc-error-alerts.js'),array('jquery'),'1.0.0', true );
wp_localize_script( 'empty-ad-check', 'ajax_send', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ));
add_action('wp_ajax_sendEmptyAd', array( $this,'sendEmptyAdCallBack'));
}
public function sendEmptyAdCallBack()
{
echo 'My name is david';
}
}
然后这应该链接到这个js文件:
jQuery(document).ready(function($) {
$.post( ajax_send.ajaxurl , {action: 'sendEmptyAd', name: 'David'})
.done(function( data ) {
console.log('ajax request says: ' + data);
});
});
答案 0 :(得分:0)
有两种形式的挂钩,wp_ajax_
(仅限管理员)和wp_ajax_nopriv_
(公开)。
在您的情况下,您应该使用公共版本:
add_action( 'wp_ajax_nopriv_sendEmptyAd', array( $this, 'sendEmptyAdCallBack' ) );
请注意,回调应以wp_die()
结尾:
public function sendEmptyAdCallBack()
{
echo 'My name is david';
wp_die();
}
我在我的环境中使用这些更改运行了您的代码并且它可以正常工作。
更新:这是完整的代码:
<强> myplugin.php 强>:
class MyPlugin_Controller
{
public static function init()
{
$class = __CLASS__;
new $class;
}
public function __construct()
{
wp_register_script( 'empty-ad-check', plugin_dir_url( __FILE__ ) . 'myplugin.js', array('jquery'), '1.0.0', true );
wp_localize_script( 'empty-ad-check', 'ajax_send', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ));
wp_enqueue_script( 'empty-ad-check' );
add_action( 'wp_ajax_nopriv_sendEmptyAd', array( $this, 'sendEmptyAdCallBack' ) );
}
public function sendEmptyAdCallBack()
{
echo 'My name is david';
wp_die();
}
}
MyPlugin_Controller::init();
<强> myplugin.js 强>:
/*global ajax_send, console, jQuery */
jQuery(document).ready(function ($) {
'use strict';
$.post(ajax_send.ajaxurl, {action: 'sendEmptyAd', name: 'David'})
.done(function (data) {
console.log('ajax request says: ' + data);
});
});