期望的查询字符串:
http://fqdn/page?categoryID=1&categoryID=2
Axios获取请求:
fetchNumbers () {
return axios.get(globalConfig.CATS_URL, {
params: {
...(this.category ? { categoryId: this.category } : {})
}
})
.then((resp) => {
// console.log(resp)
})
.catch((err) => {
console.log(err)
})
}
如您所见,它只对1个参数的1个值有效,但是如果我想制作多个值-它不起作用,我尝试使用数组:
...(this.category ? { categoryId: [1, 2] } : {})
但是它以这种方式返回:
http://fqdn/page?categoryID[]=1&categoryID[]=2
因此它不起作用。看过这个问题:Passing an object with a parameter with multiple values as a query string in a GET using axios
但是不知道他如何解决这个问题。
答案 0 :(得分:1)
这不是与axios相关的问题。这取决于您的后端服务是否能够以这种方式理解查询参数(似乎取决于框架)。从您的问题来看,当发送如下的queryParams时,我认为它不起作用
?categoryID[]=1&categoryID[]=2
并且期望
?categoryID = 1,2
您可以做的是先将数组转换为这样的字符串,然后再将其传递给axios中的params。更新代码中的以下内容,它应该可以解决您的问题。
...(this.category ? { categoryId: this.category.join(',') } : {})
看看下面的线程
答案 1 :(得分:1)
您可以使用Axios的paramsSerializer
自定义请求中参数的序列化。
请注意,URLSearchParams
按照您期望的方式序列化数组数据:
const searchParams = new URLSearchParams();
searchParams.append('foo', 1);
searchParams.append('foo', 2);
console.log(searchParams.toString()); // foo=1&foo=2
因此您可以在paramsSerializer
中使用该类,如下所示:
// my-axios.js
export default axios.create({
paramsSerializer(params) {
const searchParams = new URLSearchParams();
for (const key of Object.keys(params)) {
const param = params[key];
if (Array.isArray(param)) {
for (const p of param) {
searchParams.append(key, p);
}
} else {
searchParams.append(key, param);
}
}
return searchParams.toString();
}
});
// Foo.vue
import axios from './my-axios.js';
export default {
methods: {
async send() {
const { data } = await axios({
url: '//httpbin.org/get',
params: {
categoryId: [1, 2, 3]
}
});
// ...
}
}
}