最近使用原生JS發起加密數據請求時,遇到請求數據的部分符號(“+”、“&”)丟失的問題。如下所示:原始數據:“a+b”, 實際請求數據:“a b”;“&”符號在請求字元串里是鏈接其他參數的意思;因此數據在不處理的情況下,會丟失符號數據。 因此在我們需要處理可能含有“加號或連接符號”的數據時,一定要加 ...
最近使用原生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); });
瀏覽器實際發出的請求數據如下: