$_POST 未从 Javascript 的 Fetch() 中检索数据
Posted
技术标签:
【中文标题】$_POST 未从 Javascript 的 Fetch() 中检索数据【英文标题】:$_POST not retrieving data from Javascript's Fetch() 【发布时间】:2016-08-08 18:29:14 【问题描述】:我正在使用 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);
但是这感觉很hackish,并不理想。这是从 JS fetch()
检索帖子数据时 PHP 的预期行为吗?
无论如何我可以自动将内容放在$_POST
中吗?
【问题讨论】:
对我来说看起来是正确的,您发送的是字符串的请求正文,而不是多部分表单数据。 删除json.stringify
比解析 php://input
谢谢。这个问题给了我问题的答案。
【参考方案1】:
$_POST
仅由 application/x-www-form-urlencoded
或 multipart/form-data
请求填充。
对于任何其他数据格式,您需要手动解析php://input
。在您的情况下,您使用json_decode
并将结果放入$_POST
超全局,这是从JSON“转换”为表单数据的可接受方式。
【讨论】:
你应该改写第一句话。对我来说听起来很错误(这是正确的,但措辞很糟糕)。 ;)【参考方案2】:但这感觉很hackish,并不理想。
分配给$_POST
有点奇怪。它通常被视为只读。大多数人会使用另一个变量。
您应该在请求中设置 Content-Type,fetch
将默认声明字符串是纯文本,除非您另有说明。
这是 PHP 从 JS fetch() 检索帖子数据时的预期行为吗?
没有。当 PHP 不支持请求正文的内容类型时,这是预期的行为。
我是否可以自动将内容放入 $_POST 中?
发送表单编码或多部分数据,而不是 JSON 编码数据。
【讨论】:
$_POST
从什么时候开始是只读的?如果您问我,措辞不好,因为您可能意味着变量本身不是只读的,但大多数人不会覆盖 $_POST
变量或其内容,而是将其分配给新变量。
@CharlotteDunois — 这就是为什么我说“视为”而不是“是”以上是关于$_POST 未从 Javascript 的 Fetch() 中检索数据的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 服务未从存储库执行 deleteBy