我的console.log(url)每次都返回相同的东西但是当我在json调用之外控制它时,一切正常。为什么这样以及如何解决它?在Json拨打电话之前,for循环正在计数。例如,当我在Json内部控制i时,它返回数字8,8次,但如果我在de json之外控制i,但在for循环内它返回0到7
$(document).ready(function(){
var channels = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx","RobotCaleb","noobs2ninjas"];
for(var i = 0;i<channels.length;i++){
var url='https://api.twitch.tv/kraken/channels/'+channels[i]+'?client_id=pd57d4ktf8rjarn9q3qgtv4owbr5q0';
console.log(url);
$.getJSON(url,function(data){
console.log(url);
});
}});
答案 0 :(得分:0)
评论中的两个链接说明了为什么会发生这种情况的原因,但您看到这一点的具体原因是因为您的getJSON
调用是异步的。您的循环将在传递给getJSON
的回调执行之前完成。这就是为什么回调之外的console.log
符合您的预期,但回调内部的for(var i = 0; i < 5; i++) {
console.log("In loop", i);
// Simulate an asynchronous request
setTimeout(function() {
/*
By the time this executes, i has been incremented
to 5 so the loop is finished.
*/
console.log("In callback", i);
}, 1);
}
会将相同的结束状态记录8次。
以下片段希望能让您更清楚地了解正在发生的事情。注意“In循环”行是如何在任何“In callback”行之前发生的。
{{1}}