获取 $_POST 变量为空,同时使用 php://input 使一切正确
Getting $_POST variable as empty while getting everything correct with php://input
我创建了一个 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'));
一切似乎都很好。谁能解释为什么会这样?
我试图在文档中阅读它并在一些论坛和博客上查找但对答案不满意。
PHP 的 built-in 表单支持只能解析 application/x-www-form-urlencoded
表单和 multipart/form-data
表单。您实际发送的是 JSON-serialized object,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
:改为 the browser will do that automatically. To send a multipart/form-data
payload (which you may need to do if you want to upload larger files), use a FormData
object。
如果您最终要发送JSON,您应该在header、application/json
中使用正确的MIME 类型发送它。在 PHP 方面,您将不得不使用 json_decode
.
手动解析有效负载
我创建了一个 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'));
一切似乎都很好。谁能解释为什么会这样? 我试图在文档中阅读它并在一些论坛和博客上查找但对答案不满意。
PHP 的 built-in 表单支持只能解析 application/x-www-form-urlencoded
表单和 multipart/form-data
表单。您实际发送的是 JSON-serialized object,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
:改为 the browser will do that automatically. To send a multipart/form-data
payload (which you may need to do if you want to upload larger files), use a FormData
object。
如果您最终要发送JSON,您应该在header、application/json
中使用正确的MIME 类型发送它。在 PHP 方面,您将不得不使用 json_decode
.