2013-07-02 96 views
14

我有一個希望接收JSON,像這樣一個Web服務:jQuery的AJAX和JSON格式

{"first_name":"test","last_name":"teste","email":"[email protected]","mobile":"+44 22 2222 2222", "password":"testing"} 

我在jQuery的AJAX調用:

$.ajax({ 
     type: "POST", 
     url: hb_base_url + "consumer", 
     contentType: "application/json", 
     dataType: "json", 
     data: { 
      first_name: $("#namec").val(), 
      last_name: $("#surnamec").val(), 
      email: $("#emailc").val(), 
      mobile: $("#numberc").val(), 
      password: $("#passwordc").val() 
     }, 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(response) { 
      console.log(response); 
     } 
    }); 

有沒有什麼辦法來檢查格式我的數據正在發送?我應該沒有發送正確的JSON到服務器(這是驗證的第一步)。

是我的jQuery代碼發送有效的JSON還是我錯過了什麼?

+1

將您的JSON發送到URL並將其粘貼到jsonlint.com中 – Jimbo

+0

當您調用方法時是否碰到斷點? –

+0

如果你把你的json放在一個變量中並且使用'console.log()',你會得到什麼? – MisterBla

回答

29

你實際上並沒有發送JSON。您傳遞的對象爲data,但您需要對該對象進行串聯處理,然後傳遞該字符串。

您的dataType: "json"只告訴jQuery您希望它解析返回的JSON,並不意味着jQuery會自動將您的請求數據串聯起來。

更改爲:

$.ajax({ 
     type: "POST", 
     url: hb_base_url + "consumer", 
     contentType: "application/json", 
     dataType: "json", 
     data: JSON.stringify({ 
      first_name: $("#namec").val(), 
      last_name: $("#surnamec").val(), 
      email: $("#emailc").val(), 
      mobile: $("#numberc").val(), 
      password: $("#passwordc").val() 
     }), 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(response) { 
      console.log(response); 
     } 
}); 
+0

那麼這裏的標識是什麼? – undefined

+0

沒有標識符,內容類型是'application/json',所以HTTP請求體應該是原始的JSON,沒有標識符。 – MrCode

+0

我非常習慣Angular和其他我忘記的框架,我需要先將JSON數據串聯起來。框架已經寵壞了我。 jQuery讓你在地面上。 – KShirish

9

我從未有過這種做法任何運氣。我總是這樣做(希望這有助於):

var obj = {}; 

obj.first_name = $("#namec").val(); 
obj.last_name = $("#surnamec").val(); 
obj.email = $("#emailc").val(); 
obj.mobile = $("#numberc").val(); 
obj.password = $("#passwordc").val(); 
在你的Ajax

然後:

$.ajax({ 
     type: "POST", 
     url: hb_base_url + "consumer", 
     contentType: "application/json", 
     dataType: "json", 
     data: JSON.stringify(obj), 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(response) { 
      console.log(response); 
     } 
    }); 
4

目前要發送的數據作爲典型的POST值,如下所示:

first_name=somename&last_name=somesurname 

如果你想發送數據爲json,你需要用數據創建一個對象並對其進行字符串化。

data: JSON.stringify(someobject)