我發送FormData()到一個PHP腳本,內容如下JS:
async function callFetch(url, body, accept) {
let headers = accept ? {"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8","Accept":"application/json"} : {"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"};
let stuff ={
method: "POST",
credentials: "same-origin",
mode: "same-origin",
cache: "no-cache",
referrerPolicy: "no-referrer",
headers: headers,
body: body,
};
console.log(stuff);
return fetch(url, stuff).then(r => r.text());
}
let proFormData = new FormData();
proFormData.append('pID',prodID);
proFormData.append('saveProduct','1');
callFetch('script.php',proFormData,1).then(r => {
//do stuff
console.log(r);
});
我可以通過控制臺看到,proFormData鍵和值已設定并在fetch正文中發送。
在我的PHP腳本中,我正在測驗以下內容:
<?php
echo print_r($_POST);
echo '@===@';
echo $_POST['pID'].'<- ID';
?>
在我的瀏覽器控制臺中輸出以下內容:
//What JS outputs from console.log(stuff):
Object { method: "POST", credentials: "same-origin", mode: "same-origin", cache: "no-cache", referrerPolicy: "no-referrer", headers: {…}, body: FormData }
?
body: FormData { }
?
cache: "no-cache"
?
credentials: "same-origin"
?
headers: Object { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", Accept: "application/json" }
?
method: "POST"
?
mode: "same-origin"
?
referrerPolicy: "no-referrer"
//What PHP outputs from console.log(r):
Array
(
[-----------------------------9849953071025538958714858089
Content-Disposition:_form-data;_name] => "pID"
33
-----------------------------9849953071025538958714858089
Content-Disposition: form-data; name="saveProduct"
1
-----------------------------9849953071025538958714858089--
)
1@===@<- ID
我正在為其他PHP腳本使用這個精確的設定,它作業得很好。然而,有了這個特定的腳本,我遇到了阻力。
我不想按原樣發送,FormData()我希望按原樣JSON發送,就像我使用其他腳本一樣。
我不想導致php://input解決方法,因為即使我嘗試使用這種方法也失敗了。
uj5u.com熱心網友回復:
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
不要那樣做。您沒有發送 URL 編碼資料。讓我們fetch從物件中推斷出正確的內容型別,FormData這樣它就不會對發送的內容撒謊。然后 PHP 將能夠理解該請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460496.html
