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

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Axios中,GET请求通常不会发送请求体(body),而是将参数附加到URL的查询字符串中。但是,如果你需要发送请求体数据,你可以使用POST请求,并将数据作为请求体的一部分发送。 下面是使用Axios发送GET请求并传递参数的示例代码: ```javascript import axios from 'axios'; // 定义请求参数 const params = { key1: 'value1', key2: 'value2' }; // 使用Axios发送GET请求 axios.get('/api/endpoint', { params }) .then(response => { // 处理响应数据 console.log(response.data); }) .catch(error => { // 处理错误 console.error(error); }); ``` 在上面的示例中,我们将参数对象作为第二个参数传递给`axios.get()`方法,并使用`params`字段来指定要传递的参数。Axios会自动将参数转换为查询字符串,并将其附加到URL中。 如果你需要发送请求体数据,可以使用POST请求: ```javascript import axios from 'axios'; // 定义请求体数据 const data = { key1: 'value1', key2: 'value2' }; // 使用Axios发送POST请求 axios.post('/api/endpoint', data) .then(response => { // 处理响应数据 console.log(response.data); }) .catch(error => { // 处理错误 console.error(error); }); ``` 在上面的示例中,我们使用`axios.post()`方法发送POST请求,并将请求体数据作为第二个参数传递。Axios会将数据序列化为JSON格式并发送给服务器。 请注意,如果你需要发送表单数据而不是JSON数据,你可以使用`axios.post()`方法的第三个参数来指定请求头`Content-Type`为`application/x-www-form-urlencoded`,并将数据转换为URL编码的字符串。 希望对你有所帮助!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值