jor*_*ets 0 javascript jquery json
我很困惑,为什么在第一个console.log下面的代码中显示了对象,但第二个是未定义的.我该如何解决这个问题?
var listOfTweets = [];
for(var k = 0; k < search.length; k++){
$.getJSON(searchURL, function(tweets){
listOfTweets[k] = tweets;
console.log(listOfTweets[k]);
});
console.log(listOfTweets[k]);
}
Run Code Online (Sandbox Code Playgroud)
getJSON执行异步,最后一个console.log用于在赋值之前执行
因为我不知道你真正想要的是很难告诉你应该做什么.您需要记住的是执行顺序.
在这段代码中
$.getJSON(searchURL, function(tweets){
console.log("done");
});
console.log("Request send");
Run Code Online (Sandbox Code Playgroud)
发生的第一件事是发送请求searchURL然后接下来的事情是"请求发送"将被打印到控制台,当浏览器收到对请求的响应时,该函数将立即被调用并且"完成"将打印到控制台
进一步你的代码有关闭的问题,因为k被关闭并且对于所有回调的调用将具有相同的值(1)
要解决这个问题,你可以使用自执行功能
for(var k = 0;k<10;k++){
$.getJSON(searchURL, (function(i){
return function(tweets){
console.log("done for " + i);
}
}(k));
console.log("Request send for " + k);
}
Run Code Online (Sandbox Code Playgroud)
注意k被立即用作函数的参数,参数的值被存储以供函数return作为回调引用,并且当k递增时不会改变.如果你这样做,那么因为所有的回调都引用了同一个对象,所以它们对k都具有相同的值
(1)除非一些在循环结束前返回