axios 不会对 url 中的功能性字符进行编码

在 get 请求时如果 url 包括特殊字符的话,可能会导致接口接收参数失败,所以前端一般会对特殊字符进行 encode
方法有两种:

  • encodeURI() 对整个url进行编码,会避开url中的功能性字符,例如,& ? [ ]
  • encodeURIComponent() 对某个参数进行编码,会编码所有特殊字符

问题:在 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
  }
)

你可能感兴趣的:(axios 不会对 url 中的功能性字符进行编码)