首页 > 其他分享 >前端get请求传递数组型参数时的处理方式

前端get请求传递数组型参数时的处理方式

时间:2024-02-26 16:55:26浏览次数:18  
标签:qs axios https get 前端 api params 数组 hobbies

场景

  • 后端get接口设计接受数组型查询参数时,只接受重复的query格式,如 arr=[1,2,3],那么在query里的参数格式需要是 a=1&a=2&a=3
  • 前端get请求直接传数组会默认处理为a[]=1&a[]=2&a[]=3,后端无法识别(恼),传json字符串和join拼接后端都不同意
  • 如果直接在url中做参数拼接,实在是又蠢又费力

解决

  • 使用qs库,对axios请求封装paramsSerializer(params处理函数),让接口接收到数组类型参数时,用qs统一处理成repeat形式
  • 由于AUI是对axios做套层封装,所以对AUI同样管用

举例

import axios from 'axios'
import qs from 'qs'


const params = {
  name: 'xiaoming',
  hobbies: [1, 2, 3]
}


axios.get('https://api.example.com/api', {
  params: { array: arrayParams },
  paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'comma' })
})
// 最终请求为 https://api.example.com/api?name=xiaoming&hobbies=1,2,3


axios.get('https://api.example.com/api', {
  params: { array: arrayParams },
  paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'indices' }) // qs的默认arrayFormat
})
// 最终请求为 https://api.example.com/api?name=xiaoming&hobbies[0]=1&hobbies[1]=2&hobbies[2]=3


axios.get('https://api.example.com/api', {
  params: { array: arrayParams },
  paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'brackets' })
})
// 最终请求为 https://api.example.com/api?name=xiaoming&hobbies[]=1&hobbies[]=2&hobbies[]=3


axios.get('https://api.example.com/api', {
  params: { array: arrayParams },
  paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'repeat' })
})
// 最终请求为 https://api.example.com/api?name=xiaoming&hobbies=1&hobbies=2&hobbies=3

标签:qs,axios,https,get,前端,api,params,数组,hobbies
From: https://www.cnblogs.com/mizuki-vone/p/18034707

相关文章

  • 前端根据生成的文档流下载、预览文档
    下载:axios({  url:`url`,  method:"post",  data:{   参数...  },  responseType:"blob", }).then((res)=>{constlink=document.createElement("a");   letblob=newBlob([res.data],{type:"......
  • Python函数每日一讲29 - 一文让你彻底掌握Python中的getattr函数
    引言在Python中,getattr()函数是一种强大的工具,它允许我们在运行时动态地访问对象的属性和方法。本文将介绍getattr()函数的基本语法、常见用法和高级技巧,帮助大家更好地理解和应用这一函数。语句概览getattr()函数的语法如下:getattr(object,name[,default])其中:ob......
  • 看看 ChatGPT 给的前端面试题
    以下是一些可能出现在中国互联网公司前端开发工程师面试中的题目:解释一下CSS盒模型,并说明其中的各个部分。请解释一下响应式设计是什么,以及你是如何实现响应式设计的。什么是跨域资源共享(CORS)?它的工作原理是什么?如何在前端处理跨域请求?请解释一下JavaScript中的事件委托(E......
  • ES6技巧(快速解构赋值、数组去重、数组转对象)
    1.如何将a,b的值快速互换leta=1;letb=2;[a,b]=[b,a]解析:首先,我们有变量 a 被赋值为 1,变量 b 被赋值为 2。然后,[a,b]=[b,a] 这行代码实际上是将数组 [b,a] 解构赋值给了数组 [a,b]。在解构赋值过程中,右侧的数组 [b,a] 中的值会被依次赋给左侧......
  • 将自己开发的类库上传到 NuGet 上
    阅读前可先参阅:BaGet:搭建Nuget私服:https://www.cnblogs.com/easy5weikai/p/16245232.html要将自己开发的类库上传到NuGet上,你可以按照以下步骤进行操作:创建NuGet.org账户:首先,你需要创建一个NuGet.org账户。访问NuGet.org网站并按照指示创建一个账户。打包类库:......
  • NumPy数组图解
    N维数组的属性如果说强大而完备的第三方库,赋予了Python独特的魅力,那么N维数组(ndarray)便使得NumPy拥有了灵魂。我们仅以NumPy的一维数组为例介绍了一些函数的应用。而实际上,在机器学习中,要处理的数组大多数是N维的。需要说明的是,在物理内存中是不存在N维数组的,限于存储介......
  • 线性数据结构:数组、受限数组(栈、队列)、线性表
    1.数组数组定义  数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。数组特点  数组的关键在于在内存中的物理地址对应的是一段连续的内存。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位......
  • vue3+vite使用vue-pdf-embed或者pdf-vue3预览 PDF 文件(能躲避 XSS 攻击,需要 pdf 文件
    1.使用vue-pdf-embed1.npm安装所需插件[email protected]@0.1.62.封装组件(创建pdfPriview.index文件)<template><divclass="pdf-preview"> <vue-pdf-embed :source="state.source" v-for="pageinstate......
  • Java中的数组-暂未完结
    数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。◆其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组声明创建◆首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的......
  • 【leetcode】数组篇刷题 --滑动窗口
    /**@lcapp=leetcode.cnid=209lang=cpp**[209]长度最小的子数组*找最短的子数组*///@lccode=startclassSolution{public:intminSubArrayLen(inttarget,vector<int>&nums){//滑动窗口,//一个计算总和intsum=0;......