2017-01-06 5 views
-1

私のconsole.log(url)は毎回同じことを返しますが、私がjsonコールの外でコンソールを操作すると、すべてうまく動作します。それはどうして私はそれを修正することができますか? Jsonがコールする前にforループがカウントされています。 forループがコメント0私のループは私のgetJsonコールの中では機能しません

$(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

これはhttp://stackoverflow.com/questions/111102/how-do-javascript-closures-work/111111#111111 – Blorgbeard

+0

の複製と見なすことができると思われます.Jsonが電話する前にforループがカウントされています。例えば、私がJsonの中でiをコンソールするとき、それは8,8を返すが、私はjsonの外でiをコンソールするが、forループの内部では0から7を返す。 –

答えて

0

7に2つのリンクを返す内部例えば、それは数8,8回を返すJSON内部Iコンソール場合には私は外部デJSONコンソール場合はなぜこれが起こっているのか理由を挙げてくださいが、あなたがこれを見ている具体的な理由は、あなたのgetJSON呼び出しが非同期であるためです。 getJSONに渡すコールバックが実行される前にループが完了します。そのため、あなたのconsole.logがコールバックの外側にあるのはあなたが期待するものですが、コールバック内のものは同じ終了状態を8回ログアウトします。

次のスニペットは、うまくいけば何が起こっているのかをより明確に示します。 "In loop"行が "In callback"行の前にどのように起こるかに注目してください。

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

関連する問題