axios不會對url中的功能性字符進行編碼

在請求中若是url包括特殊字符的話,可能會致使接口接收參數失敗,因此前端通常會對特殊字符進行encode,方法有兩種前端

  • encodeURI()

對整個url進行編碼,會避開url中的功能性字符,例如,& ? [ ]ios

編碼前:http://10.10.67.67:8080/api/chain/basic/users?params=+[
編碼後:http://10.10.67.67:8080/api/chain/basic/users?params=%2b[axios

  • encodeURIComponent()

對某個參數進行編碼,會編碼全部特殊字符api

編碼前: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的encodeURIurl

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
  },
相關文章
相關標籤/搜索