我正在编写一个自定义的短代码,在某些用户事件之后,该短代码需要通过AJAX调用一些PHP文件。但是我收到了Bad Request 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函数被调用,而且我看不到哪里做错了,特别是考虑到我的代码很少。
答案 0 :(得分:0)
您没有将任何post变量发送到服务器。使用FormData()
var formData = new FormData();
formData.append('action','aj_ajax_demo');
formData.append('nonce',aj_ajax_demo.aj_demo_nonce);
然后:
fetch(aj_ajax_demo.ajax_url, {
method: 'POST',
body: formData
}).then(response => {
if (response.ok) {
response.json().then(response => {
console.log(response);
});
}
});