vue axios post發(fā)送復(fù)雜對象問題
一、項(xiàng)目情形
現(xiàn)在vue項(xiàng)目中,一般使用axios發(fā)送請求去后臺拉取數(shù)據(jù)。
在某些業(yè)務(wù)場景中,前端需要在某個字段中發(fā)送一個復(fù)雜的嵌套對象給后臺做保存并處理。雖然axios可配置發(fā)送方式(post/get等),但如果不做其他配置,post的數(shù)據(jù)其實(shí)也是拼在請求地址后面,而這種傳輸方式會有很多問題:一是可能數(shù)據(jù)丟失,二是get傳送的數(shù)據(jù)長度有l(wèi)imit,如果需要保存大段的中文,會報錯;三是數(shù)據(jù)不直觀,復(fù)雜對象的格式會出現(xiàn)問題。
二、解決方案
怎么實(shí)現(xiàn)使用post方法時,能實(shí)現(xiàn)formData方式提交,而且整個請求數(shù)據(jù)格式能像queryString一樣直觀。
使用QS將數(shù)據(jù)序列化
//main.js
import axios from 'axios';
Vue.prototype.$axios = axios; // 配置axios的訪問方式
//demo.vue
import Qs from qs;
this.$axios({
method: "post",
url: "url",
data: reqData,
transformRequest: [ function(data){
return Qs.stringify(data) //使用Qs將請求參數(shù)序列化
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded' //必須設(shè)置傳輸方式
}
}).then((res)=>{
//邏輯代碼
}
完成第一步后,可以實(shí)現(xiàn)post請求了,請求體為formData的格式,但如果reqData是一個對象嵌套數(shù)組的復(fù)雜對象,form的格式會變得非常不直觀。如果此時后臺需要將對象整個儲存起來,以便下次拉取數(shù)據(jù)渲染前端頁面,則會增加很多額外的轉(zhuǎn)化工作。
//例如obj為一個嵌套多層的復(fù)雜對象
let reqData = {
id: '123',
status: '1',
data: {
innerData: {
price: "higher",
amount: "2000",
},
outerData: {
price: "lower",
amount: "3000"!
},
parts: ['123','234','345','456']
}
}
//參考如上配置,最后請求體中parsed的數(shù)據(jù)格式會變成如下
![圖片描述][1]
對象跟數(shù)組的每一項(xiàng)都被拆拼成鍵值對,數(shù)據(jù)格式非常不直觀,如果后臺需要將整個數(shù)據(jù)保存以便下次取用,會不方便。
可以怎樣簡單處理一下,讓它變得像如下圖一的get方法一樣參數(shù)清晰呢?

只需做一個簡單的處理,將復(fù)雜對象對象變成字符串,再進(jìn)行傳輸。
let data = {
innerData: {
price: "higher",
amount: "2000",
},
outerData: {
price: "lower",
amount: "3000"!
},
parts: ['123','234','345','456']
},
reqData = {
id: '123',
status: '1',
data: **JSON.stringify(data)**
};
this.$axios({
method: "post",
url: "url",
data: reqData,
transformRequest: [ function(data){
return Qs.stringify(data) //使用Qs將請求參數(shù)序列化
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded' //必須設(shè)置傳輸方式
}
}).then((res)=>{
//邏輯代碼
}
這樣之后,數(shù)據(jù)格式變得清晰可讀,而且后臺可以根據(jù)key值直接取出整個對象。我們也可以大方優(yōu)雅地用vue axios進(jìn)行post傳輸啦。

總結(jié)
以上所述是小編給大家介紹的vue axios post發(fā)送復(fù)雜對象問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- vue中axios處理http發(fā)送請求的示例(Post和get)
- 詳解vue axios用post提交的數(shù)據(jù)格式
- 詳解Vue用axios發(fā)送post請求自動set cookie
- 解決vue處理axios post請求傳參的問題
- vue+axios實(shí)現(xiàn)post文件下載
- 解決Vue axios post請求,后臺獲取不到數(shù)據(jù)的問題方法
- 解決在Vue中使用axios POST請求變成OPTIONS的問題
- vue中使用axios post上傳頭像/圖片并實(shí)時顯示到頁面的方法
- vue 2.x 中axios 封裝的get 和post方法
- Vue-cli中post請求發(fā)送Json格式數(shù)據(jù)方式
- vue基礎(chǔ)之使用get、post、jsonp實(shí)現(xiàn)交互功能示例
- Vue使用axios post方式將表單中的數(shù)據(jù)以json格式提交給后端接收操作實(shí)例
相關(guān)文章
Element中Upload組件上傳功能實(shí)現(xiàn)(圖片和文件的默認(rèn)上傳及自定義上傳)
這篇文章主要介紹了Element中Upload組件上傳功能實(shí)現(xiàn)包括圖片和文件的默認(rèn)上傳及自定義上傳,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行
這篇文章主要介紹了如何使用yarn創(chuàng)建vite+vue3&&electron多端運(yùn)行,本文分步驟給大家介紹的非常詳細(xì),包括使用yarn創(chuàng)建vite+vue3項(xiàng)目會遇到哪些問題,感興趣的朋友跟隨小編一起看看吧2024-03-03
Vue實(shí)現(xiàn)控制商品數(shù)量組件封裝及使用
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)控制商品數(shù)量組件的封裝及使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Pycharm中開發(fā)vue?element項(xiàng)目時eslint的安裝和使用步驟
這篇文章主要介紹了Pycharm中開發(fā)vue?element項(xiàng)目時eslint的安裝和使用,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
Vue2.0使用嵌套路由實(shí)現(xiàn)頁面內(nèi)容切換/公用一級菜單控制頁面內(nèi)容切換(推薦)
這篇文章主要介紹了Vue2.0使用嵌套路由實(shí)現(xiàn)頁面內(nèi)容切換/公用一級菜單控制頁面內(nèi)容切換,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05

