axios使用过程中遇到的问题

1,366 阅读1分钟

axios get请求参数含特殊字符的编码问题

问题描述:get请求,传参格式“2020-01-01 00:00:00” 直接传的情况“ ”被转义成“+”
(2020-01-01+00:00:00),将“ ”转义成“%20”后传参被转成“%2520”(2020-01-01%252000:00:00)。 axios将“%”转义为“%25”。 期望传值 2020-01-01%2000:00:00

问题产生原因:axios会对参数中的特殊字符进行转义

解决方案:将参数拼接在url上避免axios对params进行处理。可在请求拦截器中统一处理

service.interceptors.request.use(
config => {
    // 避免对get请求参数的特殊字符进行转译
    let url = config.url
    if (config.method === 'get' && config.params) {
        url += '?'
        let keys = Object.keys(config.params)
        for (let key of keys) {
          // key对应的value无值,不进行拼接
          if(config.params[key]) {
            url += `${key}=${encodeURIComponent(config.params[key])}&`
          }
        }
        url = url.substring(0, url.length - 1)
        config.params = {}
      }
      config.url = url
      return config
  },
  error => {
    Promise.reject(error)
  }
)