2011-09-15 39 views
1

我的代碼查詢了一些json,但似乎沒有結果。當使用螢火蟲進行調試時,我可以看到請求完成並返回預期的json(底部)。Jquery json請求okey,但沒有結果

問題是,下一行(var option = ...)從來沒有達到過,所以我期望我做了一些錯誤的事情?

$.getJSON("Gateway.php?action=UserAction&subAction=json", function(result) { 
    var options = $("#creatorUserId"); 
    $.each(result, function(item) { 
     options.append($("<option />").val(item.id).text(item.value)); 
    }); 
}); 

的JSON:

json[{"id":"1","value":"Teddy"},{"id":"2","value":"Fred"},{"id":"3","value":"Roel"}] 
+2

請問您迴應包括th在'json'開始的字符?這是無效的JSON,和jQuery會考慮失敗,然後不執行成功回調(但寧靜地失敗)。 – davin

+0

此外,你在firebug中看到的最有可能是呼叫的同步執行,但不是響應。即如果你在運行getJSON的時候通過一個調試器,你不需要執行回調並看到它正在運行,因爲它不會同步執行。 – davin

+0

啊,有一個回聲在迴應「json」的代碼中很深。雖然沒有解決問題。在你的第二個評論:這是在Firebug控制檯上獲取Gateway.php的響應,而不是在調試器本身。 –

回答

1

$.each()回調採取(最多)兩個參數 - 第一個是一個索引號,和第二個是一個值。您的item始終是索引編號,而不是項目對象。

試試這個:

Gateway.php?action=UserAction&subAction=json應該返回:

[{"id":"1","value":"Teddy"},{"id":"2","value":"Fred"},{"id":"3","value":"Roel"}] 

javscript/jQuery的:

$.getJSON("Gateway.php?action=UserAction&subAction=json", function(result) { 
     var options = $("#creatorUserId"); 
     $.each(result, function(num,item) { 
      options.append($("<option />").val(item.id).text(item.value)); 
     }); 
    }); 

或者,至略少使用jQuery:

$.getJSON("Gateway.php?action=UserAction&subAction=json", function(result) { 
     var options = $("#creatorUserId"); 
     while(result) { 
      var item = result.shift(); 
      options.append($("<option />").val(item.id).text(item.value)); 
     }; 
    }); 
+0

謝謝,它沒有解決最初的問題,但修復了腳本的其餘部分。 –

+0

我今天在自己的代碼中使用了這種技術,並發現'$ .ajax'支持錯誤回調,'$ .getJSON'不支持。因此,下次您可能會考慮使用更詳細的'$ .ajax'方法,以便錯誤回調可以幫助您追蹤問題。 – Blazemonger