$ _POST没有从Javascript的Fetch()

时间:2016-04-16 21:20:50

标签: javascript php post

我使用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);
    })

string.php文件包含:

print_r($_POST);

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

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

但这感觉非常苛刻,并不理想。这是从JS fetch()检索发布数据时PHP的预期行为吗?

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:4)

  

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

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

您应该在请求上设置Content-Type,fetch默认声明字符串是纯文本,除非您另有说明。

  

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

没有。当PHP不支持请求主体的内容类型时,这是预期的行为。

  

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

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