1. 程式人生 > 實用技巧 >你需要了解的前後端傳參

你需要了解的前後端傳參

前後端傳參一般有兩種形式:

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 的形式,以&進行拼接)。