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
參考:jQuery.ajax() 文件
一般是用
application/x-www-form-urlencoded
,預設值,上傳檔案通常是用multipart/form-data
,現在使用很多 JSON 介面的也用這種。text/plain
我平常見得很少。補充
jQuery 的 ajax 要發送 application/json 請求需要
contentType:「application/json;charset=UTF-8」
processData:假
資料:stringify(aObject)
例如
雷雷使用的資料格式
簡單來說,就是把你發請求的資料當作xxx類型處理。
對應的,dataType,就是把服務端回應回來的資料當作xxx型別處理。
http中傳的資料都是字串,只是伺服器接受到資料時會根據contentType來用不同的方式解析字串。物件只能存在於記憶體中,而不僅僅是http,所有在網路中傳輸的資料都是基於字串的。
首先我不覺得你的抓包有問題,如果你確實是用的是POST請求的話,
從抓包看起來這是個GET請求,因為POST不會對請求參數做序列化處理
下面說下contentType是啥意思?
ajax的contentType是設定的http的請求頭,這個頭的目的是告訴伺服器端,我的請求參數是什麼格式的數據,你要按照對應的格式去處理,就這樣。
預設的是"application/x-www-form-urlencoded; charset=UTF-8",也就是普通的表單提交的格式,當然你也可以覆蓋,例如"application/json",這樣服務端可以直接拿到一個json請求參數。而不是一個一個的key value
這只是修改請求頭中的contentType,和你接受伺服器回應是什麼內容沒有關係。
你可以加上這個拿到json格式的資料。