共计 773 个字符,预计需要花费 2 分钟才能阅读完成。
在请求中如果 url 包括特殊字符的话,可能会导致接口接收参数失败,所以前端一般会对特殊字符进行 encode,方法有两种
encodeURI()
对整个 url 进行编码,会避开 url 中的功能性字符,例如,& ? []
编码前:http://10.10.67.67:8080/api/chain/basic/users?params=+[编码后:http://10.10.67.67:8080/api/chain/basic/users?params=%2b[
encodeURIComponent()
对某个参数进行编码,会编码所有特殊字符
编码前:http://10.10.67.67:8080/api/chain/basic/users?params=+[编码后:http://10.10.67.67:8080/api/chain/basic/users?params=%2b%5B
在 axios 中就会对 get 请求的整个 url 进行 encodeURI,导致有些 get 方法不能传 [],所以在请求拦截器中可以对 get 方法单独处理,避开 axios 的 encodeURI
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
},