后端要求get请求的参数是json字符串,例如:"[123, 456]"
1. 我就用JSON.stringify处理了一下,但出现了400错误(客户端错误,大体是因为参数传递有问题,例如服务端要求传递json串,客户端需要用JSON.stringify转换为json串)
看了一下Chrome network面板,看着也正常啊
2. 问了一下后端,后端给了一个自己在postman调试的例子:
说%5b 是[转义的 %5d是]转义的
所以需要对请求的参数转义一下。
转义后又请求了一下,不幸的是又报错了,这一次是500错误,看了一下Chrome network面板,是这样的:
这次看着已经把[]转义了,但%5B 之间又多了个25,网上搜索了一下说axios又对参数中包含的%进行了转义导致的。
3. 我们把参数放在url 里面不让axios处理了,这样问题就解决了:
这种解决方式需要对每一个get请求的参数都要进行encodeURI编码。其实可以在axios请求拦截器中做 编码操作,网上给出了这种解决方式,代码如下:
myAxios.interceptors.request.use(
config => {
let url = config.url
// get参数编码
if (config.method === 'get' && config.params) {
url += '?'
let keys = Object.keys(config.params)
for (let key of keys) {
url += `${key}=${encodeURIComponent(config.params[key])}&`
}
url = url.substring(0, url.length - 1)
config.params = {}
}
config.url = url
return config
},