ADMIN-使用FETCH API发出请求时,AJAX返回400错误

时间:2018-08-03 作者:oquiroz

我正在开发一个带有ajax处理程序的插件。我首先编写了ajax请求,以设置XHR对象。如下所示:

var data = new FormData();
data.append(\'post_title\', \'Hola como\');
data.append(\'action\', \'make_appointment\');

var xhr = new XMLHttpRequest();

xhr.addEventListener(\'readystatechange\', function() {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open(\'POST\', \'http://wpapi.localdev/wp-admin/admin-ajax.php\');
xhr.setRequestHeader(\'Cache-Control\', \'no-cache\');

xhr.send(data);
您可以注意到,我将操作作为表单数据的一部分传递。这很好,但我想改用fetch API,因为为什么不呢。

因此我将其转换为:

let form = new FormData();
form.append(\'action\', \'make_appointment\');
form.append(\'post_title\', \'hola como estas\');

fetch(ajaxSettings.ajaxurl, {
  method: \'POST\',
  headers: {
    \'Content-Type\': \'multipart/form-data\',
    \'Cache-Control\': \'no-cache\'
  },
  body: form
})
  .then(response => {
    console.log(response);
    return response.text();
  })
  .then(response => {
    console.log(response);
  });
这不起作用,它只会抛出400个错误请求。我知道由于某些原因,操作参数没有正确发送。但是,如果我不将操作作为表单数据发送,而是将其作为url参数发送,则它可以工作,如下所示:

fetch(ajaxSettings.ajaxurl, {
  method: \'POST\',
  headers: {
   \'Content-Type\': \'application/x-www-form-urlencoded\',
   \'Cache-Control\': \'no-cache\'
  },
  body: \'?action=make_appointment\'
})
我做错了什么?我只想让它作为XHR请求工作,即将动作作为表单数据发送。请注意,WordPress端的ajax处理程序已经存在并且工作正常。

1 个回复
SO网友:Suraj Khanal

要使用fetch API发出一个正常工作的HTTP请求,您必须执行以下操作。

const form = new FormData();
form.append(\'action\', \'make_appointment\');
form.append(\'post_title\', \'hola como estas\');
const params = new URLSearchParams(form);

fetch(ajaxSettings.ajaxurl, {
      method: \'POST\',
      credentials: \'same-origin\',
      headers: {
       \'Content-Type\': \'application/x-www-form-urlencoded\',
       \'Cache-Control\': \'no-cache\',
      },
      body: params
    }).then(response => {
       return response.json();
    })
    .then(response => {
       // read data here
       console.log(response);
     }).catch(err => { 
       console.log(err);
     });

结束

相关推荐

在插件中执行AJAX调用后修改元标签

我有一个插件,可以通过检查URL中的查询变量自动从新闻发布者加载文章。如果请求了一篇文章,它会对此发布者进行AJAX调用,创建新的WP\\U帖子并将其加载到模板中。我需要在这个页面中添加open graph元标记,我不知所措。我的第一次失败尝试是一次普通尝试:add_action( \'wp_head\', \'insert_fb_in_head\', 5 ); 从函数。php的主题,我原本希望从我的构建帖子中获取信息,但事实证明global $post 返回的NULL 在这种特殊情况下。所以我