前言: vue中在与后端进行数据交互时,使用axios发送请求,不做配置直接使用get请求传递数组类型参数的时候,后端是无法接收数据的,需要对axios一些简单的配置才能让后端完美的接收数组1、问题
示例代码
let params = {
statusList: ['OVERDUE', 'DELAY']
}this.$http.get('/list', params)
.then(res => {})
.catch(e => {})
上述代码在不做配置的时候请求信息为:
/list?statusList[]=OVERDUE&statusList[]=DELAY
对于后端来说,statusList[]形式的提交是无效的,实际需要的是/list?statusList=OVERDUE&statusList=DELAY
这种方式的提交。那么我们应该如何来解决这种问题呢?2、解决方案
2.1 qs插件 qs主要是增加一些安全性的查询字符串解析和序列化字符串的库,qs的更多使用方式可以参考总结中提供的地址学习
1、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 输出结果:'a[0]=b&a[1]=c'
2、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 输出结果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 输出结果:'a=b&a=c'
4、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
// 输出结果:'a=b,c'
上述我们列举了qs中的序列化几种配置,其中
{ arrayFormat: 'repeat' }
的序列化结果满足我们的条件2.2 axios配置 axios中有一个专门对数据进行序列化的配置属性paramsSerializer
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'repeat'})
},
2.3 具体配置 我们可以在axios请求拦截器中对参数进行序列化配置
axios.interceptors.request.use(async (config) => {
//只针对get方式进行序列化
if (config.method === 'get') {
config.paramsSerializer = function(params) {
return qs.stringify(params, { arrayFormat: 'repeat' })
}
}
}
3、总结
- axios中文文档
- qs插件
推荐阅读
- 【C】题目|【C语言】题集 of ⑥
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- Python进阶|警惕 Python 中少为人知的 10 个安全陷阱
- javascript|javascript中的数据类型转换
- 有趣的oython|python疲劳驾驶实时检测项目讲解(附代码)
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~
- python|oeasy教您玩转python - 007 - # 字符本质