在简码插件中注册时,Wordpress AJAX 400

时间:2019-05-26 06:11:35

标签: wordpress

我正在编写一个自定义的短代码,在某些用户事件之后,该短代码需要通过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函数被调用,而且我看不到哪里做错了,特别是考虑到我的代码很少。

1 个答案:

答案 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);
        });
    }
});