在vue中get请求如何传递数组参数
在vue中get请求如何传递数组参数问题解决方案第1步:安装qs插件(如果安装过了引入就可以了)第2步:转码第3步:更换传值方式(很重要)效果图解决方案第3步的第1段代码效果(未解决)解决方案第3步的第2段代码效果(未解决)解决方案第3步的第3段代码效果(已解决)qs插件(部分展示)问题当我们需要通过get方式传递一个包含数组的对象作为参数,例如:const params = {sort: ['i
·
在vue中get请求如何传递数组参数
问题
当我们需要通过get方式传递一个包含数组的对象作为参数,例如:
const params = {
sort: ['id,desc', 'name,asc'],
type: 'term'
}
预期是解析为:https://www.cnblogs.com/api/test?sort=id%2Cdesc&sort=name%2Casc&type=term
然而真相是这样的:https://www.cnblogs.com/api/test?&sort[]=id,desc&sort[]=name,asc&type=term,后台是不可能解析到传递的参数。
解决方案
第1步:安装qs插件(如果安装过了引入就可以了)
// 在项目中使用命令行工具输入
npm install qs
// 引入qs插件
import qs from 'qs'
第2步:转码
用qs插件把参数转码
qs.stringify(params, { arrayFormat: 'repeat' })
// 输出结果: sort=id%2Cdesc&sort=name%2Casc&type=term
第3步:更换传值方式(很重要)
作为一个优秀的前端工程师,我们习惯用json形式的接口传值方式,例如:
export function getTest(params) {
return request({
url: 'api/test',
method: 'get',
params
})
}
// https://www.cnblogs.com/api/test
// 这种是没有效果的
无奈,这种习惯方式这对于我们的需求是行不通的,所以尝试了这种方式:
export function getTest(params) {
return request({
url: 'api/test',
method: 'get',
params: qs.stringify(params, { arrayFormat: 'repeat' })
})
}
// https://www.cnblogs.com/api/test?0=sort=id%2Cdesc&sort=name%2Casc&type=term
// 虽然看似达到预期了,但并没有达成一致,字符串拼接结果中间带了 “0=” 还是行不通
于是尝试原始方式,用url字符串拼接的形式
export function getTest(params) {
return request({
url: 'api/test?' + qs.stringify(params, { arrayFormat: 'repeat' }),
method: 'get'
})
}
// https://www.cnblogs.com/api/test?sort=id%2Cdesc&sort=name%2Casc&type=term
// 和我们的预期达成一致,这才是我们要的结果
效果图
解决方案第3步的第1段代码效果(未解决)
解决方案第3步的第2段代码效果(未解决)
解决方案第3步的第3段代码效果(已解决)
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'
更多推荐
已为社区贡献1条内容
所有评论(0)