ajax 415 錯誤 $.ajax 中的contentType


用ajax提交到后台,在與后台進行數據傳輸時報了Unsupported media type-415錯誤,查了后發現Content-Type未設置,contentType 的默認是application/x-www-form-urlencoded.后端對此設置的為application/json,so設置上就可以了,可參考如下代碼:

 

$.ajax({
     type:  'POST' ,
     url: url,
     dataType:  'json' ,
     contentType:  "application/json" ,
     data: JSON.stringify(setData),
     success:  function (data){
         alert( '數據加載成功' );
     },
     error:  function (xhr, type){
         alert( '數據加載失敗' );
     }
});
 

$.ajax 中的contentType

 $.ajax 設置數據類型 applicaiton/json之后,服務器端(express)有時候拿不到數據的問題。或者報Unsupported media type-415錯誤。

原因:

$.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,形如這樣:

1
2
3
4
5
{
     a: 1,
     b: 2,
     c: 3
}

但是在一些復雜的情況下就有問題了。 例如在 ajax 中你要傳一個復雜的 json 對像,也就說是對象嵌數組,數組中包括對象,兄果你這樣傳:

1
2
3
4
5
6
7
{
   data: {
     a: [{
       x: 2
     }]
   }
}

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

這怎么可以呢?

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

1
2
3
4
5
$.ajax({
     dataType: 'json' ,
     contentType: 'application/json' ,
     data: JSON.stringify({a: [{b:1, a:1}]})
})

這樣你就可以發送復雜JSON的對象了。像現在的 restclient 都是這樣處理的。

作者:@htoooth
本文為作者原創,轉載請注明出處:https://www.cnblogs.com/htoooth/p/7242217.html

參考文章

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM