Heim  >  Fragen und Antworten  >  Hauptteil

Setzen Sie die Variable $_POST auf leer, während Sie php://input verwenden, um alles richtig zu machen

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粉032649413P粉032649413179 Tage vor285

Antworte allen(1)Ich werde antworten

  • P粉718165540

    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.

    Antwort
    0
  • StornierenAntwort