WordPOST-запрос POST завершается неудачно с XMLHttp и Axios, но работает с jQuery. Какая разница? - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь заменить jQuery на всех моих сайтах Wordpress.

У меня есть простой обработчик 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 голосов
/ 15 августа 2018

Я считаю, что это дубликат, как ответили здесь: https://wordpress.stackexchange.com/questions/282163/wordpress-ajax-with-axios. Использование Qs.js следующий код должен работать с Axios и WordPress. Также обычно ajaxurl не ajax.url - это переменная javascript, связанная с /wp-admin/admin-ajax.php. Вы можете попытаться указать это прямо на 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);
});
...