vue中get请求如何传递数组参数的方法示例
前言:vue中在与后端进行数据交互时,使用axios发送请求,不做配置直接使用get请求传递数组类型参数的时候,后端是无法接收数据的,需要对axios一些简单的配置才能让后端完美的接收数组
1、问题
示例代码
letparams={ 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.1qs插件
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.2axios配置
axios中有一个专门对数据进行序列化的配置属性paramsSerializer
paramsSerializer:function(params){ returnQs.stringify(params,{arrayFormat:'repeat'}) },
2.3具体配置
我们可以在axios请求拦截器中对参数进行序列化配置
axios.interceptors.request.use(async(config)=>{ //只针对get方式进行序列化 if(config.method==='get'){ config.paramsSerializer=function(params){ returnqs.stringify(params,{arrayFormat:'repeat'}) } } }
3、总结
axios中文文档
qs插件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。