1. 程式人生 > 其它 >談談axios中的請求頭content-type

談談axios中的請求頭content-type

axios是spa專案中常用的前後端的互動方式,其實就是promise封裝的ajax,如下為axios的基本使用

axios使用post傳送資料時,預設是直接將json放到請求體中提交到後端的,也就是說Content-Type變成了application/json;charset=utf-8,這是axios預設的請求頭content-type型別。但是實際後端要求的‘Content-Type’:

'application/x-www=form-urlencodeed'為多見,與預設配置不同。就會導致請求地址和引數都對了卻得不到資料。

post常見的資料格式(content-type)

1.Content-Type:application/json:請求體中的資料會以json字串的形式傳送到後端

2.Content-Type:application/x-www-form-urlencoded:請求體中的資料會以普通表單形式鍵值對傳送到後端

3.Content-Type:multipart/form-data:它會將請求體的資料處理為一條資訊,以標籤為單元,用分隔符分開,既可以上傳鍵值對也可以上傳檔案

下面說下常見的處理方式:

1.用URLSearchParams傳遞引數,比較省事

let param = new URLSearchParams()
param.append('username', 'admin')
param.append('pwd', 'admin')
axios({
    method: 
'post', url: '/api/lockServer/search', data: param })

但是這種方式不支援所有的瀏覽器,總體的支援比較ok,優先推薦這種解決

2.就是給axios配置預設請求頭

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'或者{headers:{'Content-Type':'application/x-www-form-urlencoded'}}

然後將引數轉換為query引數,利用qs

引入qs,這個庫是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)
})

那麼對於multipart/form-data又該如何解決呢

常見的使用場景就是前端頁面上傳個人頭像,然後點選儲存傳送後端修改原始資料,解決辦法如下:

1.Content-Type:multipart/form-data

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('更新使用者資料失敗' + error)
        })

使用如下實現使用者頭像更新

2.Content-Type:application/json

這種就是axios預設的請求資料型別了,只需要將引數序列化json字串進行傳遞就行,無須多餘的配置