vue中get请求如何传递数组参数的方法示例


Posted in Javascript onNovember 08, 2019

前言: 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插件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript css在IE和Firefox中区别分析
Feb 18 Javascript
一组JS创建和操作表格的函数集合
May 07 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
JavaScript加强之自定义event事件
Sep 21 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
浅谈Javascript中匀速运动的停止条件
Dec 19 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
ng-events类似ionic中Events的angular全局事件
Sep 05 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 Javascript
Vue搭建后台系统需要注意的问题
Nov 08 #Javascript
vue视频播放暂停代码
Nov 08 #Javascript
vue-dplayer 视频播放器实例代码
Nov 08 #Javascript
BootstrapValidator实现表单验证功能
Nov 08 #Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 #Javascript
Vue修改项目启动端口号方法
Nov 07 #Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 #Javascript
You might like
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
简单谈谈favicon
2015/06/10 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
PyTorch的torch.cat用法
2020/06/28 Python
python如何爬取网页中的文字
2020/07/28 Python
抽象类和接口的区别
2012/09/19 面试题
违反学校规定检讨书
2014/01/18 职场文书
金融保险专业求职信
2014/09/03 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python