问题
在项目中的一个异步请求函数里,代码如下:
...
...
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()函数;
终!
本文探讨了在使用GET请求时,不同浏览器对URL参数处理方式的差异导致的中文乱码问题。详细介绍了在IE浏览器中遇到的乱码现象,并提供了解决方案:通过使用encodeURI()函数来主动转义中文参数。
1385

被折叠的 条评论
为什么被折叠?



