我使用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
?
答案 0 :(得分:14)
$_POST
仅由application/x-www-form-urlencoded
或multipart/form-data
个请求填充。
对于任何其他数据格式,您需要手动解析php://input
。在您的情况下,您正在使用json_decode
并将结果放在$_POST
超全局中,这是从JSON“转换”为表单数据的可接受方式。
答案 1 :(得分:4)
但这感觉非常黑,并不理想。
分配给$_POST
有点奇怪。它通常被视为只读。大多数人会使用另一个变量。
您应该在请求上设置Content-Type,fetch
默认声明字符串是纯文本,除非您另有说明。
这是从JS fetch()中检索post数据时PHP的预期行为吗?
没有。当PHP不支持请求主体的内容类型时,这是预期的行为。
无论如何我可以自动将内容放在$ _POST中吗?
发送表格编码或多部分数据,而不是JSON编码数据。