WordPress AJAX 400在短代码插件中注册时



我正在编写一个自定义短代码,在某些用户事件之后,需要通过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功能甚至被称为,我看不到我做错了什么,尤其是考虑到我拥有的少量代码。

您不会向服务器发送任何帖子变量。使用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);
        });
    }
});

最新更新