javascript - jquery ajax contentType是啥意思?
phpcn_u1582
phpcn_u1582 2017-07-05 11:02:37
0
6
963

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
phpcn_u1582
phpcn_u1582

全部回覆(6)
漂亮男人

參考: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-urlencodedmultipart/form-datatext/plain 以外的任何內容都會觸發瀏覽器發送預檢向伺服器發出OPTIONS 請求。

一般是用 application/x-www-form-urlencoded,預設值,上傳檔案通常是用 multipart/form-data,現在使用很多 JSON 介面的也用這種。 text/plain 我平常見得很少。

補充

jQuery 的 ajax 要發送 application/json 請求需要

  1. contentType:「application/json;charset=UTF-8」

  2. processData:假

  3. 資料:stringify(aObject)

例如

雷雷

过去多啦不再A梦

使用的資料格式

滿天的星座

簡單來說,就是把你發請求的資料當作xxx類型處理。
對應的,dataType,就是把服務端回應回來的資料當作xxx型別處理。

黄舟

http中傳的資料都是字串,只是伺服器接受到資料時會根據contentType來用不同的方式解析字串。物件只能存在於記憶體中,而不僅僅是http,所有在網路中傳輸的資料都是基於字串的。

Peter_Zhu

首先我不覺得你的抓包有問題,如果你確實是用的是POST請求的話,
從抓包看起來這是個GET請求,因為POST不會對請求參數做序列化處理

下面說下contentType是啥意思?

ajax的contentType是設定的http的請求頭,這個頭的目的是告訴伺服器端,我的請求參數是什麼格式的數據,你要按照對應的格式去處理,就這樣。
預設的是"application/x-www-form-urlencoded; charset=UTF-8",也就是普通的表單提交的格式,當然你也可以覆蓋,例如"application/json",這樣服務端可以直接拿到一個json請求參數。而不是一個一個的key value

伊谢尔伦

這只是修改請求頭中的contentType,和你接受伺服器回應是什麼內容沒有關係。

你可以加上這個拿到json格式的資料。

dataType:"json"
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!