2013-02-28 200 views
5

我想使用jQuery $.ajax進行POST調用發送一些信息(通過POST,如:page.aspx?var1=value ....)。jQuery POST請求 - 返回JSON

但我也希望jQuery來處理該服務返回JSON,以便我找回一個JSON對象。

var data = {name: _name, ...}; 

var request = $.ajax({ 
    url: url, 
    type: "post", 
    data: data, 
    //dataType: "json" 
}); 

只要我使用dataType: "json",這讓我接收JSON對象,我得到對請求進行parseerror!

希望你能幫我解決這個問題!

感謝您的支持!

+0

什麼是你得到確切的錯誤? – 2013-02-28 08:34:09

+0

你可以在請求中設置一個類似於「Content-Type:application/json」的頭文件,jQuery將自動地知道它得到了什麼。 – Merec 2013-02-28 08:35:13

+1

如果你得到一個分析錯誤,這可能意味着你的JSON是無效的。你能粘貼你返回的JSON字符串嗎?這可能是語法在某個地方被打破了。 – Lev 2013-02-28 08:35:13

回答

0

確保您的serverside腳本返回編碼的json。

在php中使用json_encode()

echo json_encode($response); 

$.ajax調用設置dataType : 'json'

+1

聖潔的廢話!你們很快就變得怪異了!感謝那!! – Nik 2013-02-28 08:40:15

+0

正確的方法是通過'header('Content-type:application/json');'...在POST文件上設置標題這迫使服務器將其識別爲json。在那個時候不需要'dataType:json'。 – PlantTheIdea 2013-02-28 08:40:34

+0

@ user2118781好吧,它可以幫助你還是一樣...讓我知道更多的幫助.. – 2013-02-28 08:45:48

0

首先,post請求沒有在URL之後附加的參數。您指定的格式用於GET請求。 你可以用以下達到同樣的目標:

$.post(
'/yourURLL', 
{'data' : dataJson}, 
function(data){ 
    handleIncomingJSON(data); 
}).error(function(data, textStatus){handleUnsuccessfulSave(data, textStatus)}); 
8

從你必須讓數據以JSON格式 像

echo json_encode($response); 

請求的URL,然後你會得到成功的功能一樣,響應JSON這樣的:

 $.ajax({ 
      type:"POST", 
      url: "your_url", 
      data:data, 
      success: function (response){ 
       var arr = $.parseJSON(response); 

      } 
     }); 
+2

以我自己的經驗,當調用瀏覽器本機JSON解析器而不是使用jQuery庫進行解析時,我獲得了最佳結果。所有現代瀏覽器現在都支持這種方法,使其成爲跨瀏覽器兼容性的更好方法。 'var arr = JSON.parse(response);' – Epiphany 2014-10-13 08:17:13

0

按照該jQuery $.post documentation,我強烈建議執行所有主要的回調方法(donefailalways)開始,這樣,如果有你的JSON響應錯誤,那麼它們不會隱藏:

var jqxhr = $.post( 
    "example.php", 
    function(response) {var arr = JSON.parse(response);}, 
    'json' 
) 
.done(function() {console.log("second success");}) 
.fail(function() {console.log("error");}) 
.always(function() {console.log("finished");});