背景
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协议 。转载请注明出处!