近期在利用axios
向後臺傳資料時,axios
預設傳的是用application/json
格式,若後臺需要的資料格式為key/value
格式,可以在axios
的config
中進行配置,也可以用qs.stringify()
方法進行轉換
注:若用原生的
<form>
標籤對後臺進行post
傳輸資料,預設即為key/value
格式
關於
encodeURI()
、encodeURIComponent()
如果你是通過form
提交的,那就不需要用這個了。但是如果是你使用url
的方式
例如:ajax
提交到後臺的,就需要對url
進行encodeURI
編碼, 否則,會導致後臺出現各種亂碼,不加encodeURI
的話,預設瀏覽器編碼格式提交, 這樣的話,瀏覽器不同,傳到後臺的值也就不同了, 所以建議使用encodeURI
統一編碼為utf-8的格式到後臺,然後後臺再處理再解碼就行了
關於
encodeURI()
、encodeURIComponent()
區別
它們都是編碼URL,唯一區別就是編碼的字元範圍,其中
encodeURI
方法不會對下列字元編碼 ASCII字母、數字、~!@#$&()=:/,;?+'
encodeURIComponent
方法不會對下列字元編碼 ASCII字母、數字、~!() 所以encodeURIComponent
比encodeURI
編碼的範圍更大。 實際例子來說,encodeURIComponent
會把 http:// 編碼成 http%3A%2F%2F 而encodeURI
卻不會
資料轉換前,axios
的預設傳輸
轉換為formData
後,利用axios
傳輸
方法一:在vue中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, // 直接提交轉換後的資料即可
})
複製程式碼