我創建了一個 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'));
一切似乎都很好。誰能解釋為什麼會發生這種情況? 我嘗試在文檔中閱讀它並查找一些論壇和博客,但對答案不滿意。
PHP 的內建表單支援只能解析
application/x-www-form-urlencoded
表單和multipart/form-data
表單。您實際發送的是一個 JSON 序列化對象,其 MIME 類型為application/x-www-form-urlencoded
。要實際傳送
application/x-www-form-urlencoded
表單,請使用URLSearchParams
而不是JSON .stringify
:在這種情況下,無需明確設定
Content-Type
:瀏覽器會自動執行此操作。要傳送multipart/form-data
負載(如果您想上傳較大的文件,您可能需要這樣做),請使用FormData
# 物件。如果您最終想要發送 JSON,則應該在標頭中使用正確的 MIME 類型來發送它,
application/json
。在 PHP 方面,您將不得不使用json_decode
手动解析有效负载>.