在jQuery中使用ajax傳遞數(shù)組時候貌似沒有經(jīng)過什么處理就能被后端接收到线婚,最近在做Vue應(yīng)用州刽,使用axios向服務(wù)端傳遞數(shù)組的時候出現(xiàn)了格式不對的問題如下:
'id[0]=123&id[1]=456'
服務(wù)端期待的格式則是這樣
'a=123&a=456'
因?yàn)楹蠖私邮艿降膮?shù)不對港谊,整個請求無法處理夺颤。查看axios文檔擅憔,其中有一段介紹如下
// `paramsSerializer` 是一個負(fù)責(zé) `params` 序列化的函數(shù)
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
嘗試過后發(fā)現(xiàn)格式依然不對武氓,因?yàn)槲臋n中并沒有對arryaFormat
有哪些參數(shù)進(jìn)行說明被去,試盡各種辦法主儡,突然想起這個參數(shù)序列化的實(shí)現(xiàn)本就是基于qs實(shí)現(xiàn)的,于是在qs中找到如下說明:
使用qs
進(jìn)行字符串序列化默認(rèn)格式如下:
qs.stringify({ a: ['b', 'c', 'd'] });
// 'a[0]=b&a[1]=c&a[2]=d'
我們可以通過設(shè)置 indices
為false實(shí)現(xiàn)以下效果
qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
// 'a=b&a=c&a=d'
也可以使用arrayformat
選項(xiàng)輸出 指定數(shù)組的格式
qs.stringify({ id: ['b', 'c'] }, { arrayFormat: 'indices' })
// 'id[0]=b&id[1]=c'
qs.stringify({ id: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 'id[]=b&id[]=c'
qs.stringify({ id: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 'id=b&id=c'
以上只是 qs.stringfy
在序列化字符串時的用法惨缆,更多qs功能可以參考 https://www.npmjs.com/package/qs