axios get请求特殊字符编码问题

后端要求get请求的参数是json字符串,例如:"[123, 456]" 

1. 我就用JSON.stringify处理了一下,但出现了400错误(客户端错误,大体是因为参数传递有问题,例如服务端要求传递json串,客户端需要用JSON.stringify转换为json串)

    

   看了一下Chrome network面板,看着也正常啊

 

2. 问了一下后端,后端给了一个自己在postman调试的例子:

   

   说%5b 是[转义的   %5d是]转义的

   所以需要对请求的参数转义一下。

 转义后又请求了一下,不幸的是又报错了,这一次是500错误,看了一下Chrome network面板,是这样的:

这次看着已经把[]转义了,但%5B 之间又多了个25,网上搜索了一下说axios又对参数中包含的%进行了转义导致的。

3. 我们把参数放在url 里面不让axios处理了,这样问题就解决了:

   

 

这种解决方式需要对每一个get请求的参数都要进行encodeURI编码。其实可以在axios请求拦截器中做 编码操作,网上给出了这种解决方式,代码如下:

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
  },

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值