Setzen Sie die Variable $_POST auf leer, während Sie php://input verwenden, um alles richtig zu machen
P粉032649413
P粉032649413 2024-03-27 19:30:45
0
1
385

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粉032649413
P粉032649413

Antworte allen(1)
P粉718165540

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手动解析有效负载>.

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage