搜尋

首頁  >  問答  >  主體

javascript - jquery ajax contentType是啥意思?

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_u1582phpcn_u15822690 天前996

全部回覆(6)我來回復

  • 漂亮男人

    漂亮男人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-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)

    例如

    雷雷

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 11:04:37

    使用的資料格式

    回覆
    0
  • 滿天的星座

    滿天的星座2017-07-05 11:04:37

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

    回覆
    0
  • 黄舟

    黄舟2017-07-05 11:04:37

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

    回覆
    0
  • 天蓬老师

    天蓬老师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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-05 11:04:37

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

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

    dataType:"json"

    回覆
    0
  • 取消回覆