问题
在项目中的一个异步请求函数里,代码如下:
...
...
const response = await axios({
url:`/.../...?value=${value}`,
method: 'GET'
});
...
...
- 使用GET请求,在其他浏览器下,该请求的参数可以正常发送,
谷歌浏览器下正常
- 而在IE中参数值是中文时就会变成乱码,其他就正常。
中文参数值下出现乱码
参数值为数字时正常
原因
- Firefox、Chrome浏览器下会自动对请求URL的参数,使用
encodeURI
编码,中文参数会被自动转义; - IE浏览器则不会,所以导致乱码,请求失败;
解决:
- 使用
encodeURI()
函数,对参数主动转义;
...
...
const response = await axios({
url:`/.../...?value=${encodeURI(value)}`,
method: 'GET'
});
...
...
POST
也可以通过POST请求避免IE浏览器这个问题,因为POST请求的参数、数据都放在请求体中,这样就避免了请求URL参数,自动转义的问题;
但是如果使用post
,api
就不够RESTful
,因为这是一个获取数据的请求;
所以为了兼容IE,最好的办法是使用encodeURI()
函数;
终!