最近使用原生JS發起加密數據請求時,遇到請求數據的部分符號(“+”、“&”)丟失的問題。如下所示:原始數據:“a+b”, 實際請求數據:“a b”;“&”符號在請求字符串里是鏈接其他參數的意思;因此數據在不處理的情況下,會丟失符號數據。
因此在我們需要處理可能含有“加號或連接符號”的數據時,一定要加轉義處理:window.encodeURIComponent("a+b");
為避免請求時產生類似的問題,尤其是處理加密數據的傳輸時,我們在js封裝請求的時候,可以加上轉義的操作后再發送請求。
如下圖:
JS-fetch請求數據:
我實際要發起的請求數據為:參數data,數據為:a+b&c_d; 實際上瀏覽器把data='a b'當成了一個參數,c_d=''當成了一個參數。
fetch('/api/adyenpay/pay', {
method: 'post',
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: "data=a+b&c_d"
}).then(function (res) {
return res.json();
}).then(function (data) {
var dataJson = JSON.parse(data.data);
});
瀏覽器實際發出的請求數據如下:

