$.ajax 中的contentType

來源:互聯網
上載者:User

在 cnodejs.org 論壇中有一個問題,讓我也很奇怪,說是 $.ajax 設定資料類型 applicaiton/json之後,伺服器端(express)就拿不到資料,好奇之下,就去翻了翻資料,發現了一個自己也沒有注意到的事。於是有了這篇文章。

本文

$.ajax contentType 和 dataType , contentType 主要設定你發送給伺服器的格式,dataType設定你收到伺服器資料的格式。

在http 請求中,get 和 post 是最常用的。在 jquery 的 ajax 中, contentType都是預設的值:application/x-www-form-urlencoded,這種格式的特點就是,name/value 成為一組,每組之間用 & 聯結,而 name與value 則是使用 = 串連。如: wwwh.baidu.com/q?key=fdsa&lang=zh 這是get , 而 post 請求則是使用請求體,參數不在 url 中,在請求體中的參數表現形式也是: key=fdsa&lang=zh的形式。

索引值對這樣組織在一般的情況下是沒有什麼問題的,這裡說的一般是,不帶巢狀型別JSON,也就是 簡單的JSON,形如這樣:

{    a: 1,    b: 2,    c: 3}
但是在一些複雜的情況下就有問題了。 例如在 ajax 中你要傳一個複雜的 json 對像,也就說是對象嵌數組,數組中包括對象,兄果你這樣傳:
{  data: {    a: [{      x: 2    }]  }}

這個複雜物件, application/x-www-form-urlencoded 這種形式是沒有辦法將複雜的 JSON 組織成索引值對形式(當然也有方案這點可以參考 ) ,你傳進去可以發送請求,但是服務端收到資料為空白, 因為 ajax 沒有辦法知道怎樣處理這個資料。

這怎麼可以呢。

聰明的程式員發現 http 還可以自訂資料類型,於是就定義一種叫 application/json 的類型。這種類型是 text , 我們 ajax 的複雜JSON資料,用 JSON.stringify序列化後,然後發送,在伺服器端接到然後用 JSON.parse 進行還原就行了,這樣就能處理複雜的對象了。

$.ajax({    dataType: 'json',    contentType: 'application/json',    data: JSON.stringify({a: [{b:1, a:1}]})})
這樣你就可以發送複雜JSON的對象了。像現在的 restclient 都是這樣處理的。

參考文章

jquery ajax 文檔,告訴你可以使用預設的application/x-www-form-urlencoded, multipart/form-data, or text/plain 這三種,其它的也可以,但是需要告訴ajax 的怎樣序列化它。 datetype 和 contenttype 的區別,這篇文章告訴你,datetype 和 contentType 的區別。 jquery ajax 發送 JSON,這篇文章告訴你如何使用 contentType。 application-x-www-form-urlencoded,這篇文章告訴你如何 application-x-www-form-urlencoded 的區別。 post資料,這篇文章講 post 資料形式。

轉載地址:https://www.cnblogs.com/htoooth/p/7242217.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.