热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

list在get请求怎么传值_vue中get请求如何传递数组参数

前言:vue中在与后端进行数据交互时,使用axios发送请求,不做配置直接使用get请求传递数组类型参数的时候,后端是无法接收数据的&#x

前言: 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、总结



推荐阅读
author-avatar
910621rh_270
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有