我的循环在我的getJson调用中不起作用

时间:2017-01-06 01:25:48

标签: jquery

我的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);    
        });
 }});

1 个答案:

答案 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}}