前言: vue中在與后端進(jìn)行數(shù)據(jù)交互時(shí)雅潭,使用axios發(fā)送請(qǐng)求慷荔,不做配置直接使用get請(qǐng)求傳遞數(shù)組類型參數(shù)的時(shí)候膀钠,后端是無(wú)法接收數(shù)據(jù)的杖刷,需要對(duì)axios一些簡(jiǎn)單的配置才能讓后端完美的接收數(shù)組
1斤儿、問(wèn)題
示例代碼
let params = {
statusList: ['OVERDUE', 'DELAY']
}
this.$http.get('/list', params)
.then(res => {})
.catch(e => {})
上述代碼在不做配置的時(shí)候請(qǐng)求信息為:/list?statusList[]=OVERDUE&statusList[]=DELAY
對(duì)于后端來(lái)說(shuō)剧包,statusList[]形式的提交是無(wú)效的恐锦,實(shí)際需要的是/list?statusList=OVERDUE&statusList=DELAY
這種方式的提交。那么我們應(yīng)該如何來(lái)解決這種問(wèn)題呢疆液?
2一铅、解決方案
2.1 qs插件
qs主要是增加一些安全性的查詢字符串解析和序列化字符串的庫(kù),qs的更多使用方式可以參考總結(jié)中提供的地址學(xué)習(xí)
1堕油、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 輸出結(jié)果:'a[0]=b&a[1]=c'
2潘飘、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 輸出結(jié)果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 輸出結(jié)果:'a=b&a=c'
4掉缺、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
// 輸出結(jié)果:'a=b,c'
上述我們列舉了qs中的序列化幾種配置攘须,其中{ arrayFormat: 'repeat' }
的序列化結(jié)果滿足我們的條件
2.2 axios配置
axios中有一個(gè)專門對(duì)數(shù)據(jù)進(jìn)行序列化的配置屬性paramsSerializer
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'repeat'})
},
2.3 具體配置
我們可以在axios請(qǐng)求攔截器中對(duì)參數(shù)進(jìn)行序列化配置
axios.interceptors.request.use(async (config) => {
//只針對(duì)get方式進(jìn)行序列化
if (config.method === 'get') {
config.paramsSerializer = function(params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
}
}
}