Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request

Posted

技术标签:

【中文标题】Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request【英文标题】:Wordpress returns 400 Bad Request on ajax call with fetch API 【发布时间】:2019-06-07 19:25:54 【问题描述】:

我正在使用 fetch API 语法对 admin-ajax.php 进行 Ajax 调用。下面是调用后端脚本的代码:

fetch(ajax_obj.ajaxurl, 
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    body: JSON.stringify(this.data),
    headers: 
      "Content-Type": "application/json"
    
  )

并获得 400 Bad Request 响应。

谁能告诉我这个请求哪里不对?

在chrome中查看网络开发工具时,可以看到发送的body是ok的,url也是ok的... ...据我所知,4xx 状态代码是针对客户端错误的,所以我什至不看服务器端代码...如果我错了,请给我反馈...

实际上,我有这样的 jQuery ajax 调用:

this.data = 
              'action': 'ajax_product_query',
              'locations': this.locations,
              'type': this.category != '' ? this.category : [],
              'all-locations': this.filters['locationFilter'].all.checked,
              'page': ajax_obj.current_page
            ;

          $.ajax(
            url: ajax_obj.ajaxurl,
            method: 'post',
            dataType: 'json',
            data: this.data,
            beforeSend: function(xhr) 
              button.innerhtml = 'Loading...';
            ,
            success: (data) =>   ...

...它就像一个魅力...

然后,愿意移除 jQuery 依赖,想将 jQuery ajax 调用转换为 Fetch API 语法,如下所示:

fetch(ajax_obj.ajaxurl, 
    method: "POST",
    mode: "cors",
    cache: "no-cache",
    credentials: "same-origin",
    body: JSON.stringify(this.data),
    headers: 
      "Content-Type": "application/json"
    
  )
  .then(response => response.json()) ...

然后请求变成了 400 个错误请求......

谢谢!

【问题讨论】:

我们需要查看更多代码来提供帮助。 究竟是什么代码...我会共享后端脚本,但正如我提到的,该过程从前端失败... 好吧,那就适合你自己吧。祝你好运! 好的,我会尝试给出更多解释...谢谢 你找到解决这个问题的方法了吗? 【参考方案1】:

因为在 JS 获取 'POST' 请求后,您无法在 PHP 中获取 $_POST 数据。肮脏的解决方案。您可以在“/wp-admin/admin-ajax.php”中添加此代码来解决此问题:

if ( !empty( trim( file_get_contents("php://input" ) ) ) ) 
  $post = trim(file_get_contents("php://input"));
  $_POST = ( array ) json_decode( $post );
    $_REQUEST['action'] = $_POST['action'];

或者尝试找到更好的解决方案。 附言对不起我的英语

【讨论】:

以上是关于Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 中使用 fetch 正确处理来自 REST API 的数据对象

从 WordPress API (wp-json) 取消设置数据

主题中设置标题的多站点 Wordpress API CORS 问题(v5)

在 javascript 中使用 fetch 请求 API 存在 CORS 策略错误

无法使用 fetch API 获取数据

如何在 React 中使用 fetch() API 来设置状态