解决axios请求后端返回中文数据乱码问题

在项目开发时,遇到后端返回的数据中文乱码,顿时惊了,什么情况?

于是尝试着去分析解决,一般浏览器的编码是UTF-8,且axios请求默认为utf-8,而后端的编码为GBK。所以出现乱码。尝试了无数种办法,如设置编码格式:Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',都没有用,而且网上的解决方式比较少,看了axios的文档后,可以设置响应数据类型和进行响应前的数据处理,于是尝试在这个函数中进行解码

 

解决办法:

getAudio(ParaentID, ParaentName, paraentType) {
      const para = {
        DirId: ParaentID
      }
      var that = this
      that.$http({
        method: 'post',
        url: Url.broadcastApi + '/MLListDir;JSESSIONID=' + Url.JSESSIONID,
        data: para,
       // 以下为解决中文乱码的主要代码
        responseType: 'blob',
        transformResponse: [function(data) {
          var reader = new FileReader()
          reader.readAsText(data, 'GBK')
          reader.onload = function(e) {
            var music = JSON.parse(reader.result)
            console.log(music)
            that.data = music
          }
          return data
        }],
        headers: {
          'X-Requested-With': 'XMLHttpRequest',
          'Content-Type': 'application/x-www-form-urlencoded'
        }
      }).then(res => {
        console.log('sss', res)
      })
    },

写完上面的可能你以为问题解决了,打印下数据,发现报错了,大概意思就是说数据不是blob类型,原因是mock模块会影响原生的ajax请求,使得服务器返回的blob类型改变,所以我们还需要在引入mock的地方把引入这句代码注释,一般是main.js中。

 

这样就好了, 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值