2011-09-15 43 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