$_POST 不从 Javascript 的 Fetch() 中检索数据

2022-08-30 22:07:48

我正在使用javascript的发布数据。fetch()

    fetch('/string.php', {
      method: 'post',
      body: JSON.stringify({
        name: 'helloe world',
      })
    })
    .then(function(response) {
      if (response.status >= 200 && response.status < 300) {
        return response.text()
      }
      throw new Error(response.statusText)
    })
    .then(function(response) {
      console.log(response);
    })

字符串.php文件包含:

print_r($_POST);

现在我的问题是返回一个空数组。我可以通过将文件附加以下文件来解决此问题:$_POST

$_POST = json_decode(file_get_contents('php://input'), true);

但这感觉非常笨拙,并不理想。这是 PHP 在从 JS 检索帖子数据时的预期行为吗?fetch()

无论如何,我可以自动将内容放在里面吗?$_POST


答案 1

$_POST仅由 或 请求填充。application/x-www-form-urlencodedmultipart/form-data

对于任何其他数据格式,您需要手动解析。在你的例子中,你正在使用并将结果放在超全局中,这是一种从JSON“转换”为表单数据的可接受方式。php://inputjson_decode$_POST


答案 2

但这感觉非常笨拙,并不理想。

分配给有点奇怪。它通常被视为只读。大多数人会使用另一个变量。$_POST

但是,您应该在请求上设置内容类型,除非您另有说明,否则将默认声明字符串为纯文本。fetch

这是 PHP 在从 JS fetch() 检索 post 数据时的预期行为吗?

不。当 PHP 不支持请求正文的内容类型时,这是预期的行为。

无论如何,我可以自动将内容放在$ _POST内吗?

发送表单编码或多部分数据,而不是 JSON 编码数据。