今天有人問同一套後臺系統爲何jquery能夠正常使用,axios卻報錯呢,下面總結以下:javascript
總的來講是jquery和axios傳參類型不一樣,那爲何jquery和axios請求時傳參類型不一樣? html
1)jquery默認 form Data(如:url?a=1形式);java
由於jquery在執行post請求時,會默認設置Content-Type爲application/x-www-form-urlencoded,發送的參數爲form Data形式,因此服務器可以正確解析;node
2)而使用原生ajax、axios請求時,若是不顯示的設置Content-Type,axios默認發送數據時,數據格式是application/json,控制檯參數裏顯示Request Payload(即 json格式),而並不是咱們經常使用的Form Data格式。jquery
既然咱們知道axios post方法默認使用application/json格式編碼數據,那麼解決方案就有兩種:ios
一是後臺改變接收參數的方法;git
另外一種則是將axios post方法的編碼格式修改成application/x-www-form-urlencoded,這樣就不須要後臺作什麼修改了。
--------------------- github
改變接收參數的解決辦法:ajax
1)URLSearchParamsnpm
var params = new URLSearchParams(); params.append('key1', 'value1'); //你要傳給後臺的參數值 key/value params.append('key2', 'value2'); params.append('key3', 'value3');
querystring
module as follows:
const axiosInstance = axios.create({
// axios實例配置
timeout: 15000,
method:
'post'
,
headers: {
'Content-Type'
:
'application/x-www-form-urlencoded'
},
transformRequest: [
function
(data) {
// 請求前參數序列化
return
qs.stringify(data);
}]
});
params用於get請求,是添加到url的請求字符串中的,即
是發送請求的查詢參數對象,對象中的數據會被拼接成
url?param1=value1¶m2=value2
。。
參考:
https://github.com/axios/axios/blob/master/README.md#using-applicationx-www-form-urlencoded-format