近期在利用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, // 直接提交轉換後的數據便可
})
複製代碼