axios異步提交表單數(shù)據(jù)的幾種方法
踩坑Axios提交form表單幾種格式
前后端分離的開發(fā)前后端, 前端使用的vue,后端的安全模塊使用的SpringSecurity,使用postman測試后端的權(quán)限接口時發(fā)現(xiàn)都正常,但是使用vue+axios發(fā)送異步的請求后端一直獲取不出axios提交的form表單的數(shù)據(jù),爬坑兩個半鐘頭找到了答案
axios用post異步形式提交的數(shù)據(jù)和我們直接使用from表單提交的數(shù)據(jù)的格式(Form Data格式)是不一樣的,在下面列舉
默認(rèn)格式Request Payload
直接使用axios發(fā)送異步請求,沒任何處理的代碼如下:
const service = axios.create({}) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: pojo })
這種方式提交的表單格式是默認(rèn)是RequestPayload, 它的長下面這個樣子
可以看到,它的Contet-type是 "Content-Type": "application/json;"
但是后臺的SpringSecurity對這種結(jié)果可不買單,在Request中解析不出任何數(shù)據(jù)來
處理成Form Data格式
使用插件qs, 安裝命令如下:
npm install --save qs
請求編碼:
const service = axios.create({}) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: qs.stringify(pojo) }) } 或者 doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: pojo , transformRequest: [function (data) { data = qs.stringify(data); return data; }], }) }
經(jīng)過這樣處理的表單數(shù)據(jù)長成下面的這樣, 這也是我們最常用的Form Data格式,這種格式的數(shù)據(jù)可以從后臺的HttpRequest中把提交的屬性解析出來
其他類型的Content-Type對應(yīng)的表單數(shù)據(jù)格式
const service = axios.create({ headers: { "Content-Type": "multipart/form-data; charset=utf-8;" } }) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: qs.stringify(pojo) }) }
它長這樣
const service = axios.create({ headers: { "Content-Type": "multipart/form-data; charset=utf-8;" } }) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: pojo }) } ---
const service = axios.create({ headers: { "Content-Type": "multipart/form-data; charset=utf-8;" } }) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data:pojo }) }
const service = axios.create({ headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8;" } }) doLogin (pojo) { return request({ url: '/api/user/login', method: 'post', data: qs.stringify(pojo) }) }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解@Vue/Cli 3 Invalid Host header 錯誤解決辦法
這篇文章主要介紹了詳解@Vue/Cli 3 Invalid Host header 錯誤解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01深入淺析Vue中mixin和extend的區(qū)別和使用場景
Vue中有兩個較為高級的靜態(tài)方法mixin和extend,接下來給大家介紹Vue中mixin和extend的區(qū)別和使用場景,感興趣的朋友一起看看吧2019-08-08vue + webpack如何繞過QQ音樂接口對host的驗證詳解
這篇文章主要給大家介紹了關(guān)于利用vue + webpack如何繞過QQ音樂接口對host的驗證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07vue 實現(xiàn)element-ui中的加載中狀態(tài)
這篇文章主要介紹了vue 實現(xiàn)element-ui中的加載中狀態(tài),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11vue2結(jié)合echarts實現(xiàn)一個地圖的效果
這篇文章主要介紹了vue2結(jié)合echarts實現(xiàn)一個地圖的效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家何用vue和echarts實現(xiàn)一個地圖有一定的幫助,感興趣的朋友一起看看吧2024-03-03Vue.js 3.x 中的響應(yīng)式數(shù)據(jù)ref 與 reactive詳解
ref 和 reactive 是 Vue.js 3 中用于創(chuàng)建響應(yīng)式數(shù)據(jù)的兩個關(guān)鍵函數(shù),它們分別適用于不同類型的數(shù)據(jù),幫助我們更好地組織和管理組件的狀態(tài),這篇文章主要介紹了Vue.js 3.x 中的響應(yīng)式數(shù)據(jù):ref 與 reactive,需要的朋友可以參考下2024-01-01