簡(jiǎn)單聊一聊axios配置請(qǐng)求頭content-type
前言
現(xiàn)在前端開(kāi)發(fā)中需要通過(guò)Ajax發(fā)送請(qǐng)求獲取后端數(shù)據(jù)是很普遍的一件事情了,鑒于我平時(shí)在擼碼中用的是vue技術(shù)棧,今天這里來(lái)談?wù)勎覀兂S玫陌l(fā)Ajax請(qǐng)求的一個(gè)插件—axios。
> 現(xiàn)在網(wǎng)上可能發(fā)送Ajax請(qǐng)求有很多種插件,每種用法可能略有差異,大家只需挑選一種自己喜歡的即可。畢竟現(xiàn)在還有很多人使用jQuery,$.ajax用法也是很多了。
開(kāi)始
因?yàn)樾枰玫絘xios插件,所以我們現(xiàn)在項(xiàng)目種下載依賴
npm install axios -S
axios雖然是一個(gè)插件,但是我們不需要通過(guò)Vue.use(axios)來(lái)使用,下載完成后,只需在項(xiàng)目中引入即可,至于為什么大家可以百度看看,或者留言,貌似是因?yàn)殚_(kāi)發(fā)者在封裝axios時(shí),沒(méi)有寫install這一步。
使用
比如我們?cè)陧?xiàng)目中的myInfo.vue中使用axios,當(dāng)組件在創(chuàng)建成功后發(fā)送Ajax請(qǐng)求得到用戶信息展示在我們面前。先引入,然后在組件生命周期函數(shù)created中發(fā)請(qǐng)求。

如果需要先請(qǐng)求數(shù)據(jù)然后根據(jù)數(shù)據(jù)渲染頁(yè)面展示在我們面前,通??梢栽诮M件生命周期鉤子created中發(fā)送Ajax請(qǐng)求即可,此時(shí)組件實(shí)例中的屬性和方法可以被調(diào)用。

現(xiàn)在到了重點(diǎn)的時(shí)刻了~~~
axios 使用 post 發(fā)送數(shù)據(jù)時(shí),默認(rèn)是直接把 json 放到請(qǐng)求體中提交到后端的。也就是說(shuō),我們的 Content-Type 變成了 application/json;charset=utf-8 ,這是axios默認(rèn)的請(qǐng)求頭content-type類型。但是實(shí)際我們后端要求的 ‘Content-Type’: ‘application/x-www-form-urlencoded’ 為多見(jiàn),這就與我們不符合。所以很多同學(xué)會(huì)在這里犯錯(cuò)誤,導(dǎo)致請(qǐng)求數(shù)據(jù)獲取不到。明明自己的請(qǐng)求地址和參數(shù)都對(duì)了卻得不到數(shù)據(jù)。
我們現(xiàn)在來(lái)說(shuō)說(shuō)post請(qǐng)求常見(jiàn)的數(shù)據(jù)格式(content-type)
- Content-Type: application/json : 請(qǐng)求體中的數(shù)據(jù)會(huì)以json字符串的形式發(fā)送到后端
- Content-Type: application/x-www-form-urlencoded:請(qǐng)求體中的數(shù)據(jù)會(huì)以普通表單形式(鍵值對(duì))發(fā)送到后端
- Content-Type: multipart/form-data: 它會(huì)將請(qǐng)求體的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開(kāi)。既可以上傳鍵值對(duì),也可以上傳文件。
我們熟悉了常見(jiàn)的請(qǐng)求數(shù)據(jù)格式之后,現(xiàn)在我們來(lái)解決剛才遇到的問(wèn)題: 后端需要接受的數(shù)據(jù)類型為:application/x-www-form-urlencoded,我們前端該如何配置:
常見(jiàn)方法匯總:
1.【用 URLSearchParams 傳遞參數(shù)】代碼簡(jiǎn)單,省事
let param = new URLSearchParams()
param.append('username', 'admin')
param.append('pwd', 'admin')
axios({
method: 'post',
url: '/api/lockServer/search',
data: param
})
可以看到我在項(xiàng)目中采用的就是第一種方法。> 需要注意的是: URLSearchParams 不支持所有的瀏覽器,但是總體的支持情況還是 OK 的,所以優(yōu)先推薦這種簡(jiǎn)單直接的解決方案

2.配置axios請(qǐng)求頭中的content-type為指定類型
3.axios.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded’;或者{headers:{‘Content-Type’:‘application/x-www-form-urlencoded’}}`
4.將參數(shù)轉(zhuǎn)換為query參數(shù), 利用qs
引入 qs ,這個(gè)庫(kù)是 axios 里面包含的,不需要再下載了。
import Qs from 'qs'
let data = {
"username": "cc",
"psd": "123456"
}
axios({
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: 'post',
url: '/api/lockServer/search',
data: Qs.stringify(data)
})好了,我們解決了常見(jiàn)的application/x-www-form-urlencoded形式的傳參,那么對(duì)于后面的兩種又是怎樣轉(zhuǎn)換的呢,且聽(tīng)我一一道來(lái)。
Content-Type: multipart/form-data
對(duì)于這種類型的數(shù)據(jù),我們常見(jiàn)前端頁(yè)面上傳個(gè)人圖像,然后點(diǎn)擊保存發(fā)送后端修改原始數(shù)據(jù)。解決辦法下:
let params = new FormData()
params.append('file', this.file)
params.append('id', localStorage.getItem('userID'))
params.append('userName', this.name)
params.append('sex', this.sex)
params.append('mobile', this.phone)
params.append('email', this.email)
params.append('qq', this.qq)
params.append('weChat', this.WeChat)
axios.post(URL, params, {headers: {'Content-Type': 'multipart/form-data'}}).then(res => {
if (res.data.code === 0) {
this.$router.go(-1)
}
}).catch(error => {
alert('更新用戶數(shù)據(jù)失敗' + error)
})
可以看到我這里就是用到了這種方法實(shí)現(xiàn)用戶圖像更新效果的~~


Content-Type: application/json
這種是axios默認(rèn)的請(qǐng)求數(shù)據(jù)類型,我們只需將參數(shù)序列化json字符串進(jìn)行傳遞即可,無(wú)需多余的配置。
總結(jié)
好了,以上基本的axios配置Content-Type的方法就講述到這里,歡迎大家提出更好的建議和指正其中的錯(cuò)誤。
相關(guān)文章
vue父組件給子組件的組件傳值provide inject的方法
在本篇文章里小編給大家整理的是一篇關(guān)于vue父組件給子組件的組件傳值provide inject的方法,需要的朋友們學(xué)習(xí)下。2019-10-10
在vue中給后臺(tái)接口傳的值為數(shù)組的格式代碼
這篇文章主要介紹了在vue中給后臺(tái)接口傳的值為數(shù)組的格式代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
vue3如何使用postcss-px-to-viewport適配屏幕
這篇文章主要介紹了vue3如何使用postcss-px-to-viewport適配屏幕問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue數(shù)據(jù)初始化initState的實(shí)例詳解
Vue 實(shí)例在建立的時(shí)候會(huì)運(yùn)行一系列的初始化操作,而在這些初始化操作里面,和數(shù)據(jù)綁定關(guān)聯(lián)最大的是 initState。這篇文章主要介紹了vue數(shù)據(jù)初始化--initState,需要的朋友可以參考下2019-04-04
antdesign-vue結(jié)合sortablejs實(shí)現(xiàn)兩個(gè)table相互拖拽排序功能
這篇文章主要介紹了antdesign-vue結(jié)合sortablejs實(shí)現(xiàn)兩個(gè)table相互拖拽排序功能,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Element?Plus的el-tree-select組件懶加載+數(shù)據(jù)回顯詳解
el-tree-select組件是el-tree和el-select的結(jié)合體,他們的原始屬性未被更改,下面這篇文章主要給大家介紹了關(guān)于Element?Plus的el-tree-select組件懶加載+數(shù)據(jù)回顯的相關(guān)資料,需要的朋友可以參考下2022-11-11
淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實(shí)例,為undefined
這篇文章主要介紹了淺談vue使用axios的回調(diào)函數(shù)中this不指向vue實(shí)例,為undefined,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

