通常數據都在URL傳參,params:data前端
eg: Request URL:http://api.anjianba.cn/api/Training/Query
或者Request URL:http://api.anjianba.cn/api/Training/Query/23
ios
{ name:"Myname", { types:[1,3], forms:[2,5] } }
若是傳遞比較複雜的數據時,Query String Parameters,後臺不喜歡處理這種數據json
正常的處理以後:Request URL:http://api.anjianba.cn/api/Training/Query?planName=&startTime=&endTime=&types[]=1&types[]=3
axios
須要這種形式的:Request URL:http://api.anjianba.cn/api/Training/Query?planName=&startTime=&endTime=&types=1&types=3
api
在jQuery中是設置 traditional:true
,便可轉換爲如上數據類型。
axios的config中設置:瀏覽器
get(url, data = {}, options = {}) { let config = { params: data, headers: { 、、、 },{ 'paramsSerializer': function(params) { return qs.stringify(params, { indices: false }) // return qs.stringify(params, { arrayFormat: "repeat" }) }, ...options } return new Promise((resolve, reject) => { axios.get(url, config) .then(response => { resolve(response.data); }) .catch((error) => { reject(error); }) }) }
提交這種複雜類型數據:網絡
{ name:"Myname", { types:[1,3], forms:[2,5] } }
json
,
'Content-Type':'application/json'
JSON.stringify(data)
json字符串FormData
類型的
'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'
序列化:qs.stringify(data)
ids[]=27&ids[]=26
==> ids%5B0%5D=27&ids%5B1%5D=26
app
注意:谷歌瀏覽器最多有6個請求並行,簡而言之,你能夠取消請求,前端不接受請求,可是請求資源一旦佔用,pending狀態結束前不可以使用 window._axiosPromiseArr=[]; //設置cancel函數 config.cancelToken = new axios.CancelToken(cancel=>{ window._axiosPromiseArr.push({cancel}); }); //手動cancel window._axiosPromiseArr.forEach((el,index)=>{ el.cancel(); }); window._axiosPromiseArr = [];
最後感謝夏大師的一塊兒討論研究,爲本文成稿作出重要貢獻函數