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這種方式的提交狮杨。以下是2種解決方式:
2、解決方案
2.1 qs插件
qs主要是增加一些安全性的查詢字符串解析和序列化字符串的庫(kù)到忽,使用前先安裝并引入qs庫(kù)
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è)專(zhuān)門(mén)對(duì)數(shù)據(jù)進(jìn)行序列化的配置屬性paramsSerializer
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'repeat'})
},
我們可以在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' })
}
}
}