POST請求contentType設定為application/json,但請求卻把data的json轉成了字串?
請大神指教是什麼原因?
程式碼如下
$.ajax({
method: 'POST',
url: "demo_test.txt",
data: {
aa: 1,
bb: 2
},
contentType: "application/json",
success: function (result) {}
});
請求抓包
POST http://localhost:8888/demo_test.txt HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 9
Origin: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36
Content-Type: application/json
Accept: */*
X-Requested-With: XMLHttpRequest
Referer: http://172.17.35.112:8099/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: selectFluence=4; VFS_USERNAME=admin; VFS_PASSWORD=123456; VFS_APPURL=; VFS_ISSAVE=true; VFS_ISDMZ=true; webserver_is_save=0; _alert=1495876699555
aa=1&bb=2
漂亮男人2017-07-05 11:04:37
參考:jQuery.ajax() 文件
contentType(預設:'application/x-www-form-urlencoded; charset=UTF-8')
類型:布林值或字串
向伺服器發送資料時,使用此內容類型。預設值為“application/x-www-form-urlencoded; charset=UTF-8”,這適用於大多數情況。如果您明確地將內容類型傳遞給 $.ajax(),那麼它始終會傳送到伺服器(即使沒有傳送資料)。從 jQuery 1.6 開始,您可以傳遞 false 來告訴 jQuery 不要設定任何內容類型標頭。注意:W3C XMLHttpRequest 規格規定字元集始終為 UTF-8;指定另一個字元集不會強制瀏覽器變更編碼。注意:對於跨域請求,將內容類型設定為
application/x-www-form-urlencoded
、multipart/form-data
或text/plain
以外的任何內容都會觸發瀏覽器發送預檢向伺服器發出OPTIONS 請求。
一般是用 application/x-www-form-urlencoded
,預設值,上傳檔案通常是用 multipart/form-data
,現在使用很多 JSON 介面的也用這種。 text/plain
我平常見得很少。
jQuery 的 ajax 要發送 application/json 請求需要
contentType:「application/json;charset=UTF-8」
processData:假
資料:stringify(aObject)
例如
雷雷黄舟2017-07-05 11:04:37
http中傳的資料都是字串,只是伺服器接受到資料時會根據contentType來用不同的方式解析字串。物件只能存在於記憶體中,而不僅僅是http,所有在網路中傳輸的資料都是基於字串的。
天蓬老师2017-07-05 11:04:37
首先我不覺得你的抓包有問題,如果你確實是用的是POST請求的話,
從抓包看起來這是個GET請求,因為POST不會對請求參數做序列化處理
下面說下contentType是啥意思?
ajax的contentType是設定的http的請求頭,這個頭的目的是告訴伺服器端,我的請求參數是什麼格式的數據,你要按照對應的格式去處理,就這樣。
預設的是"application/x-www-form-urlencoded; charset=UTF-8",也就是普通的表單提交的格式,當然你也可以覆蓋,例如"application/json",這樣服務端可以直接拿到一個json請求參數。而不是一個一個的key value
伊谢尔伦2017-07-05 11:04:37
這只是修改請求頭中的contentType,和你接受伺服器回應是什麼內容沒有關係。
你可以加上這個拿到json格式的資料。
dataType:"json"