[英]Variable scope in anonymous function
我正在尝试使用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循环时,links数组显示为空。 这里发生了什么?
尝试:
$(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');
}
});
});
您的循环可能是在回调之前执行的;)
那是因为$.getJSON
是一个异步方法。 即使在$.getJSON
之后,代码执行仍会继续,并到达for
循环,到那时,您的异步请求尚未完成。 您应该在$.getJSON
移动循环。
此jsFiddle http://jsfiddle.net/cArYg/2/显示了在getJson回调之前发生的迭代
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.