近期在利用axios
向后台传数据时,axios
默认传的是用application/json
格式,若后台须要的数据格式为key/value
格式,能够在axios
的config
中进行配置,也能够用qs.stringify()
方法进行转换vue
注:若用原生的
<form>
标签对后台进行post
传输数据,默认即为key/value
格式ios
关于
encodeURI()
、encodeURIComponent()
若是你是经过form
提交的,那就不须要用这个了。可是若是是你使用url
的方式
例如:ajax
提交到后台的,就须要对url
进行encodeURI
编码, 不然,会致使后台出现各类乱码,不加encodeURI
的话,默认浏览器编码格式提交, 这样的话,浏览器不一样,传到后台的值也就不一样了, 因此建议使用encodeURI
统一编码为utf-8的格式到后台,而后后台再处理再解码就好了ajax
关于
encodeURI()
、encodeURIComponent()
区别
它们都是编码URL,惟一区别就是编码的字符范围,其中
encodeURI
方法不会对下列字符编码 ASCII字母、数字、~!@#$&()=:/,;?+'
encodeURIComponent
方法不会对下列字符编码 ASCII字母、数字、~!() 因此encodeURIComponent
比encodeURI
编码的范围更大。 实际例子来讲,encodeURIComponent
会把 http:// 编码成 http%3A%2F%2F 而encodeURI
却不会json
数据转换前,axios
的默认传输axios
转换为formData
后,利用axios
传输浏览器
axios
的配置this.$axios({
method: 'post',
url: 'https://jsonplaceholder.typicode.com/posts',
// 利用 transformRequest 进行转换配置
transformRequest: [
function(oldData){
// console.log(oldData)
let newStr = ''
for (let item in oldData){
newStr += encodeURIComponent(item) + '=' + encodeURIComponent(oldData[item]) + '&'
}
newStr = newStr.slice(0, -1)
return newStr
}
],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: dataObj,
})
复制代码
qs.stringify()
进行转换import qs from 'qs' // qs在安装axios后会自动安装,只须要组件里import一下便可
// 代码省略...
dataObj = qs.stringify(dataObj) // 获得转换后的数据为 string 类型
this.$axios({
method: 'post',
url: 'https://jsonplaceholder.typicode.com/posts',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: dataObj, // 直接提交转换后的数据便可
})
复制代码