我创建了一个 React 应用程序,从中调用基于 PHP 构建的服务器。
以下是我调用 PHP 文件的方式:
const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: JSON.stringify({ name, username, password }), }; console.log(requestOptions); fetch('http://localhost/crud/requests/signup.php', requestOptions) .then(res => res.json()) .then(data => console.log(data));
这是我在 PHP 文件中的内容:
if (isset($_POST) && !empty($_POST)) { // do something }
当我打印 $_POST
变量时,我得到一个空数组。甚至 $_RESPONSE
也是空的。
但是当我尝试像这样打印输入流时:
print_r(file_get_contents('php://input'));
一切似乎都很好。谁能解释为什么会发生这种情况? 我尝试在文档中阅读它并查找一些论坛和博客,但对答案不满意。
P粉7181655402024-03-28 13:41:16
PHP 的内置表单支持只能解析 application/x-www-form-urlencoded
表单和 multipart/form-data
表单。您实际发送的是一个 JSON 序列化对象,其 MIME 类型为 application/x-www-form-urlencoded
。
要实际发送application/x-www-form-urlencoded
表单,请使用URLSearchParams
而不是 JSON.stringify
:
fetch('http://localhost/crud/requests/signup.php', { method: 'POST', body: new URLSearchParams({ name, username, password }), }) .then(res => res.json()) .then(data => console.log(data));
在这种情况下,无需显式设置 Content-Type
:浏览器会自动执行此操作。要发送 multipart/form-data
负载(如果您想上传较大的文件,您可能需要这样做),请使用 FormData
对象。
如果您最终想要发送 JSON,则应该在标头中使用正确的 MIME 类型来发送它,application/json
。在 PHP 方面,您将不得不使用 json_decode
.