在與後端的調試中發現一個問題,使用post發請求時,發送的params後端一直說沒收到參數,F12發現參數確確實實已經發送了。如圖:ajax
使用swagger發送一樣的參數請求卻能夠接收到:json
經過比對發現,二者的不一樣在於一個參數類型是Form Data,一個是Request Payload。什麼意思呢?segmentfault
百度一下 你就知道後端
Request Payload更準確的說是http request的payload body。通常用在數據經過POST請求或者PUT請求。它是HTTP請求中空行的後面那部分。(PS:這裏涉及一個http常被問到的問題,http請求由哪幾部分組成,通常是請求行,請求頭,空行,請求體。payload body應該是對應請求體。)api
一個請求伴隨着header設置爲Content-Type: application/json時,參數看起來是這樣的:瀏覽器
POST /some-path HTTP/1.1 Content-Type: application/json { "foo" : "bar", "name" : "John" }app
若是你只是正常的請求一個ajax請求,瀏覽器是會把你提交的params做爲Payload展現出來,由於他也不知道params來自哪裏。post
但若是你提交的請求設置了method="POST" 而且header設置了Content-Type: application/x-www-form-urlencoded或者Content-Type: multipart/form-data,那麼你的請求看起來就是下面這樣的,相似GET請求裏的參數拼接:url
POST /some-path HTTP/1.1 Content-Type: application/x-www-form-urlencoded foo=bar&name=Jackspa
這裏的form data就是request payload,在這裏瀏覽器知道的更多:他知道bar是表單foo的值Jack是name的值,因此這裏作了展現。
在回到以前的問題,經過觀察圖片發現,二者的區別確實是由於header中Content Type的值設置不一樣致使的:
經過查看request.js證明了這個驗證:
解決辦法:
在請求中,設置一個header便可