首頁  >  問答  >  主體

將 $_POST 變數設為空,同時使用 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'));

一切似乎都很好。誰能解釋為什麼會發生這種情況? 我嘗試在文檔中閱讀它並查找一些論壇和博客,但對答案不滿意。

P粉032649413P粉032649413229 天前330

全部回覆(1)我來回復

  • 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.

    回覆
    0
  • 取消回覆