背景

axios默认使用application/json格式进行参数传递,但是后台需要的是k-v格式,所以需要对axios的请求参数进行配置,此处提供两种常用方法,我更推荐方法二

方法一: 配置transformRequest

import axios from 'axios'
axios({
  method: 'post',
  url: 'xxx',
  // 利用 transformRequest 进行转换配置
  transformRequest: [
    function(oldData){
      let x = ''
      for (let item in oldData){
        x += encodeURIComponent(item) + '=' + encodeURIComponent(oldData[item]) + '&'
      }
      x= x.slice(0, -1)
      return x
    }
  ],
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: dataObj,
})

其中encodeURIComponent是JavaScript内置的函数。

方法二:利用qs.stringify()转换data

import axios from 'axios'
import qs from 'qs' //在安装axios时,默认就安装了
axios({
  method: 'post',
  url: 'xxx',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: qs.stringify(data)
})

遗留问题

如果将参数改成form-data格式,一旦参数中存在object,提交的数据会被encode成[object object],目前还没有很好的解决办法,只能通过JSON.stringify()将object格式化成字符串再提交到后端,由后端进行解析处理。


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

uniapp真机调试技巧 上一篇
iOS 应用签名证书的区别 下一篇