在vue项目中,封装axios的get方法时,需要用到paramsSerializer
1、当传参为数组时,默认的传参数据,控制台的payload中的数组key名称后边会多一个[],例如传参ids: [1,2,3],解析出来的是
如果需要去掉中括号,就需要使用到paramsSerializer
如下
import axios from 'axios';
import qs from 'qs'// 引入qs
const axios_ = axios.create({
baseURL: config.baseURL,
timeout: 60000, // 请求时间超过60秒视为超时
withCredentials: true,
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
paramsSerializer(params) {
return Qs.stringify(params, { arrayFormat: 'repeat', allowDots: true });
}
});
或者针对某一个get请求来设置
axios.get(url,{
params,
paramsSerializer(params) {
return Qs.stringify(params, { arrayFormat: 'repeat', allowDots: true });
}
}).then(res => {}).catch(err => {})
2、对于传时间参数时,如‘2023-01-01 12:00:00’,如果没有配置paramsSerializer,中间的空格,会被解析成+
payload中是正常的,但是自动拼接到url后,空格就变成了+,会导致调用接口失败,报400。此时,需要后台特殊处理,或者前端配置paramsSerializer。
配置paramsSerializer后,空格就会被编码成%20
此时调用接口就正常了