【问题标题】:$_REQUEST gets parameters but not $_POST when using fetch api使用 fetch api 时 $_REQUEST 获取参数但不获取 $_POST
【发布时间】:2018-11-22 02:39:08
【问题描述】:

我正在使用 fetch 向后端“ajax-admin.php”发送一个 POST 请求,然后该请求重定向到我在 functions.php 中的一个 php 函数。 我决定用 'fetch' api 替换 xmlHttpRequests。 我用 fetch 做一个发布请求,如下所示:

fetch(url, {
        method: 'POST',

        credentials: "include",
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        }


      })
    .then(res => res.json())
    .then(data => resolve(data)) // we call resolve with the data
    .catch(err => reject(err));

  });

其中url的查询字符串形式为:action=login&tokend_id=1234

在服务器端,我使用 $_POST 来检索参数“action”和“token_id”的值。 但是我看到的是 $_POST 是空的,而 $_REQUEST 确实有参数。因此,如果我执行 $_POST['token_id'] 会出现错误,因为 $_POST 为空。但是如果我这样做 $_REQUEST['token_id'] ,我会得到那个参数的值。

知道为什么会这样吗? 为什么参数会在 $_REQUEST 而不是 $_POST。

我用这个语句检查了 $_POST 是否为空:

 if ( isset( $_POST ) && 0 === count($_POST) ) 

谢谢

【问题讨论】:

  • REQUEST 同时具有 post 和 get,正如您在 url 中看到的值,使用的是 GET 而不是 POST
  • 因为,您正在执行 GET 请求并且不会与 POST 方法交互(反之亦然)。

标签: php ajax post fetch


【解决方案1】:

url的查询字符串在哪里...

您实际上在这里所做的是向带有查询字符串的 URL 发送 POST 请求。查询字符串被解析并放入$_REQUEST$_GET无论使用的实际 HTTP 方法如何。但是,$_POST 只能填充实际的 POST 请求带有请求正文

在您的fetch() 调用中,指定body: formDataformData 可以用这种查询字符串格式或其他方式表示。另见:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Body

【讨论】:

  • 那么任何想法。为什么当我使用 xmlHttpRequest POST 请求,再次将参数作为 URL 的查询字符串部分的一部分传递时,我实际上可以使用 $_POST 检索值。这就是令人困惑的地方。我希望 fetch 和 xmlHttpRequest 在 POST 请求中的行为方式相同,但它们不会。
  • @malena 如果 PHP 和您的网络服务器配置正确,$_POST 将永远不会从查询字符串本身填充。它只会从已解析的 POST 请求正文中填充。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2014-02-24
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多