Heim > Fragen und Antworten > Hauptteil
Ich habe eine React-App erstellt, von der aus ich einen auf PHP basierenden Server aufrufe.
So rufe ich die PHP-Datei auf:
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));
Das ist, was ich in der PHP-Datei habe:
if (isset($_POST) && !empty($_POST)) { // do something }
Wenn ich $_POST
变量时,我得到一个空数组。甚至 $_RESPONSE
drucke, ist es auch leer.
Aber wenn ich versuche, den Eingabestream so auszudrucken:
print_r(file_get_contents('php://input'));
Alles scheint in Ordnung zu sein. Kann jemand erklären, warum das passiert? Ich habe versucht, es in der Dokumentation zu lesen und in einigen Foren und Blogs nachzuschlagen, war aber mit den Antworten nicht zufrieden.
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
.