你需要了解的前後端傳參
前後端傳參一般有兩種形式:
key=value形式傳參(即 parameter 形式)
body形式傳參(傳json資料給後端)
key=value 形式傳參
1.如果使用的是 GET 請求,瀏覽器展示的 Request URL 會自動在路徑後面加上 ?a=1&b=2這樣的引數,這就是 key=value 形式傳參, 在控制檯看到的引數形式是 “Query String Parameters”,後端解析時是用 querystring.parse 進行處理。
axios 請求示例
importrequestfrom'axios'
...
someInterface (params) {
return request({
url: '請求路徑',
method: 'GET',
params
})
},
瀏覽器關於 GET 請求的呈現:
2.如果傳送 POST 請求,對傳參進行如下處理,則在控制檯看到的引數形式是 “Form Data”,而且瀏覽器會自動將 Request Headers 的 Content-Type 設定為 application/x-www-form-urlencoded, 這種也是 key=value 形式傳參, 後端解析時是用 querystring.parse 進行處理。
處理方式1:
importrequestfrom'axios'
importqsfrom'qs'
...
someInterface (params) {
return request({
url: '請求路徑',
method:'POST',
data:qs.stringify(params)
})
},
處理方式2:
importrequestfrom'axios'
importqsfrom'qs'
...
someInterface (params) {
return request({
url: '請求路徑',
method: 'POST',
data: params,
transformRequest: [(data) => {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}]
})
},
瀏覽器呈現:
廣州品牌設計公司https://www.houdianzi.com
body 形式傳參
如果傳送 POST、PUT、PATCH 等請求,若 content-type 為 application/json(使用 axios 傳送這些請求時,瀏覽器 Request Headers 的 Content-Type 沒顯示出,則預設為 application/json),在控制檯中看到的引數形式叫做 "Request payload",後端解析用 body-parser 來處理
axios 請求示例
importrequestfrom'axios'
...
someInterface (params) {
return request({
![clipboard.png](/img/bVbx9Ds)
url: '請求路徑',
method: 'POST',
data: params
})
},
瀏覽器呈現:
另外,jquery 的 ajax 請求中當 type 為 POST 時,會將 contentType統一處理成:
"application/x-www-form-urlencoded;charset=UTF-8", 所以使用的是 Form Data 這種傳參形式,我測試時目前沒看到過有 Request payload 這種形式的。
總之,method 用 GET 還是 POST 是後端定義好的,前端寫死就好,至於是 key=value 還是 body 形式,要看後端是什麼方式來解析,並非 method 為 POST, 就一定要用 body 形式,也可以是 key=value 形式。qs.stringify 可以轉化成 key=value 形式(即將引數物件序列化成 URL 的形式,以&進行拼接)。