美文网首页
vue中get请求如何传递数组参数

vue中get请求如何传递数组参数

作者: 阿凡农 | 来源:发表于2020-01-09 16:55 被阅读0次

    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' })
    }
    }
    }

    相关文章

      网友评论

          本文标题:vue中get请求如何传递数组参数

          本文链接:https://www.haomeiwen.com/subject/pyayactx.html