vue的axios使用post時必須使用qs.stringify而get不用問題
問題

vue里代碼如下:
this.$http.post('/getMatterList.do',{"matterIds":"1,2,3"})
.then((res)=>{
console.log(res);
})
axios官方文檔都這么示范的,仔細看下瀏覽器里發(fā)出去的請求

傳送參數的形式不是form-data,而是Request Payload。
只要做兩步設置就可以解決了
用Qs.stringify()將對象序列化成URL的形式,Qs是axios里面自帶的,所以直接引入就可以了
設置請求頭里的’Content-Type’為’application/x-www-form-urlencoded’
import Qs from 'qs'
var data = Qs.stringify({"matterIds":"1,2,3"});
this.$http.post('/getMatterList.do',data, {headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then((res)=>{
console.log(res)
})
改完之后再來看下,問題已經解決了

原因
HTTP請求中的get請求和post請求參數的存放位置是不一樣的,get請求的參數以鍵值對的方式跟在url后面的,而post請求的參數是以鍵值對的方式在請求體里的
get請求

post請求

為何要設置請求頭里的’Content-Type’
使用不同請求方式時,參數的傳輸方式是不一樣的,但是服務端在取接口的請求參數時,用的方法其實卻是一樣的,都是使用request.getParameter(key)來獲取,其實是因為tomcat在中間會對請求參數進行解析處理,處理完把解析出來的表單參數放在request parameter map中,所以后端就可以通過request.getParameter(key)來統(tǒng)一獲取數據,而tomcat解析的時候是通過’contentType’來知道當前的請求是post請求,當’contentType’為"application/x-www-form-urlencoded",它才會去讀取請求體數據。
為何要用Qs.stringify()將對象序列化成URL的形式:
post請求參數是以鍵值對的形式存在請求體里,用Qs.stringify()就是把傳入的對象轉換為鍵值對。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue?echarts實例項目商家銷量統(tǒng)計圖實現詳解
Echarts,它是一個與框架無關的?JS?圖表庫,但是它基于Js,這樣很多框架都能使用它,例如Vue,估計IONIC也能用,因為我的習慣,每次新嘗試做一個功能的時候,總要新創(chuàng)建個小項目,做做Demo2022-09-09
Vue.js與 ASP.NET Core 服務端渲染功能整合
本文通過案例給大家詳細分析了ASP.NET Core 與 Vue.js 服務端渲染,需要的朋友可以參考下2017-11-11

