我創建了一個 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粉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
.