我正在编写一个自定义的短代码,需要在一些用户事件之后通过AJAX调用一些PHP文件。但我收到了错误的400号请求wp_ajax_*
未绑定操作。
下面是我的插件代码的一个简单示例
function aj_ajax_demo_shortcode() {
return \'<h4>Shortcode</h4>\';
}
add_shortcode( \'ajax_demo\', \'aj_ajax_demo_shortcode\' );
add_action( \'wp_ajax_nopriv_aj_ajax_demo\', \'aj_ajax_demo_process\' );
add_action( \'wp_ajax_aj_ajax_demo\', \'aj_ajax_demo_process\' );
function aj_ajax_demo_process() {
wp_send_json((object) array(\'msg\' => \'hello world\'));
}
add_action( \'wp_enqueue_scripts\', \'aj_enqueue_scripts\' );
function aj_enqueue_scripts() {
wp_enqueue_script(
\'aj-demo\',
plugin_dir_url( __FILE__ ) . \'aj-demo-ajax-code.js\'
);
wp_localize_script(
\'aj-demo\',
\'aj_ajax_demo\',
array(
\'ajax_url\' => admin_url( \'admin-ajax.php\' ),
\'aj_demo_nonce\' => wp_create_nonce(\'aj-demo-nonce\')
)
);
}
这是我的JS:
fetch(aj_ajax_demo.ajax_url, {
method: \'POST\',
data: {
action : \'aj_ajax_demo\',
nonce : aj_ajax_demo.aj_demo_nonce,
}
}).then(response => {
if (response.ok) {
response.json().then(response => {
console.log(response);
});
}
});
就我所研究的而言,我是按照正确的顺序做事的,所以不知道为什么我的AJAX函数没有被调用。因为这是一个短代码,所以我遗漏了什么吗?
最合适的回答,由SO网友:Jacob Peattie 整理而成
问题是您试图将jQuery AJAX API的参数与本机Fetch API一起使用。具体来说,问题是JS Fetch API不支持data
论点
对于管理ajax。php请求在WordPress中工作$_REQUEST[\'action\']
属性需要填充,要使用Fetch API执行此操作,需要传递FormData 对象到body
参数:
var data = new FormData();
data.append( \'action\', \'aj_ajax_demo\' );
data.append( \'nonce\', aj_ajax_demo.aj_demo_nonce );
fetch(aj_ajax_demo.ajax_url, {
method: \'POST\',
body: data,
}).then(response => {
if (response.ok) {
response.json().then(response => {
console.log(response);
});
}
});