我有一些 ajax 代碼似乎在我到目前為止使用過的大多數地方都可以正常作業,但是在嘗試將它用于我頁面上的用戶詳細資訊更新時,如果使用它似乎會丟失“ ”符號電子郵件地址(如test [email protected]來自通過如test [email protected]在我的PHP檔案。
function prefUpdate() {
let ytTog = document.getElementById("togBtn").checked;
let unameNew = document.getElementById("uname").value;
let usnameNew = document.getElementById("usname").value;
let emailNew = document.getElementById("email").value;
let params = "ytTog=" ytTog "&unameNew=" unameNew "&usnameNew=" usnameNew "&emailNew=" emailNew;
let xhr = new XMLHttpRequest();
xhr.open('POST', 'pref_update.php', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
let return_data = xhr.responseText;
if(return_data) {
<do stuff>
}
}
}
xhr.send(params);
}
所以在這里我抓住一個按鈕,名字和電子郵件地址,并將其傳遞給一個 php 檔案,該檔案回傳一些我可以處理的資料。
我覺得這可能是'application/x-www-form-urlencoded'導致它的原因,但是在谷歌上搜索并沒有給我太多解決它的方法。
[編輯] 只是說我嘗試multipart/form-data代替,application/x-www-form-urlencoded但這完全破壞了事情。
uj5u.com熱心網友回復:
進行 ajax 呼叫時,您必須正確編碼資料。
您可以使用 URLSearchParams 物件為您執行此操作。
let params = new URLSearchParams({ytTog, unameNew, usnameNew, emailNew});
...
xhr.send(params);
uj5u.com熱心網友回復:
你是對的。對于 Content-Type:application/x-www-form-urlencoded,所有“ ”號都表示“”(空格)。所以它應該由 function 編碼encodeURIComponent()。
let params = Object.entries({ ytTog, unameNew, usnameNew, emailNew })
.map(pair => pair.map(encodeURIComponent).join('='))
.join('&');
表單MDN :
對于 application/x-www-form-urlencoded,空格將被 替換,因此人們可能希望在 encodeURIComponent() 替換之后用 額外替換 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336570.html
標籤:javascript 阿贾克斯
上一篇:如何允許用戶更改JSON陣列
