Wordpress POST请求在XMLHttp和Axios上失败,但在jQuery上有效。有什么不同?

时间:2018-06-28 14:34:55

标签: jquery wordpress xmlhttprequest axios

我正在尝试在所有Wordpress网站上替换jQuery。

我有一个简单的处理程序example_handler,该处理程序应返回“ Hello World!”。

function example_handler() {

  echo 'Hello World!';

  wp_die();

}

add_action('wp_ajax_nopriv_example_handler','example_handler');
add_action('wp_ajax_example_handler','example_handler');

当我使用 jQuery 时,我得到了预期的响应:

const data = {action: 'example_handler'}

jQuery.post(ajax.url,data,r => {console.log(r);});

使用 Axios 时,出现400错误:

axios.post(ajax.url, {
  action: 'bp_contact_form_handler'
})
.then(r => {
  console.log(r);
})
.catch(e => {
  console.log(e);
});

当我使用 XMLHttp 时,出现400错误:

const request = new XMLHttpRequest();

request.open('POST',ajax.url,true);
request.setRequestHeader("Content-Type", "application/json");

request.onload = () => {

  const response = JSON.parse(request.response);

  console.log(request.response);

};

request.send(JSON.stringify(data));

1 个答案:

答案 0 :(得分:0)

我相信这是重复的,如此处的回答:https://wordpress.stackexchange.com/questions/282163/wordpress-ajax-with-axios。使用Qs.js,以下代码应适用于Axios和WordPress。通常,ajaxurl而非ajax.url是绑定到/wp-admin/admin-ajax.php的javascript变量。您可以尝试将其直接指向admin-ajax.php以排除潜在的问题。

var data = { 
   action: 'bp_contact_form_handler' 
};

axios.post( ajaxurl, Qs.stringify( data ) )
.then(r => {
   console.log(r);
})
.catch(e => {
  console.log(e);
});