我正在尝试使用jQuery getJSON()
函数中的匿名函数在JavaScript中填充数组,如下所示。
$(document).ready(function() {
function Link(url, title) {
this.url = url;
this.title = title;
}
var links = [];
$.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
$.each(data.data.children, function(i, item) {
var title = item.data.title;
var url = item.data.url;
links.push(new Link(url, title));
})
});
for(var i=0; i< links.length; i++) {
var output = "<a href='" + k + "'>" + links[k] + "</a>";
$('<p>' + link + '</p>').appendTo('#content');
}
});
但是,当我点击for循环时,链接数组显示为空。这是怎么回事?
答案 0 :(得分:3)
试试:
$(document).ready(function() {
function Link(url, title) {
this.url = url;
this.title = title;
}
$.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
var links = [];
$.each(data.data.children, function(i, item) {
var title = item.data.title;
var url = item.data.url;
links.push(new Link(url, title));
})
for(var i=0; i< links.length; i++) {
var output = "<a href='" + k + "'>" + links[k] + "</a>";
$('<p>' + link + '</p>').appendTo('#content');
}
});
});
您的循环可能在回调之前执行;)
答案 1 :(得分:3)
那是因为$.getJSON
是一种异步方法。代码执行即使在$.getJSON
之后仍然继续,并且到达for
循环,到那时,您的异步请求尚未完成。您应该在$.getJSON
内移动循环。
答案 2 :(得分:1)
这个jsFiddle http://jsfiddle.net/cArYg/2/显示了在getJson回调之前发生的迭代