2016-04-13 15 views
1

なぜ、それぞれのfeedNameが同じ名前(MedryBW)で出力されていますか?私はしばらくそれを使いこなしましたが、それを理解することはできません。同じループを何度も繰り返すのではなく、ループの各繰り返しでフィードの名前を出力する必要があります。みんな、ありがとう。forループで変数が変更されない - JavaScript

var feeds = ["Towellie", "TrumpSC", "TeamSp00ky", "TwitchPlaysPokemon", "Widgitybear", "AriaBlarg", "TheMexicanRunner", "OPNerd", "rabbitbong", "Wingsofdeath", "MedryBW"]; 

$(document).ready(function(){ 
    for(x = 0; x < feeds.length; x++){ 
     var feedName = feeds[x]; 
     $.getJSON('https://api.twitch.tv/kraken/streams/' + feeds[x] + '?callback=?', function(data) { 
      if(data.stream === null){ 
       $('#feeds').append("<p>" + feedName + " is offline </p>"); 
      } else { 
       $('#feeds').append("<p>" + feedName + " is streaming " (data.stream.game) + "/<p>"); 
      } 
     }); 
    } 
}); 

答えて

0

あなたがforループでのAjaxを書いてきたように、成功コールバックがforループの後に実行されるコールバック関数は、ずっと後に実行されるため、上記の変更がない中で、

3

に動作します

var feeds = ["Towellie", "TrumpSC", "TeamSp00ky", "TwitchPlaysPokemon", "Widgitybear", "AriaBlarg", "TheMexicanRunner", "OPNerd", "rabbitbong", "Wingsofdeath", "MedryBW"]; 

$(document).ready(function() { 
    feeds.forEach(function(feedName) { 
    $.getJSON('https://api.twitch.tv/kraken/streams/' + feedName + '?callback=?', function(data) { 
     if (data.stream === null) { 
     $('#feeds').append("<p>" + feedName + " is offline </p>"); 
     } else { 
     $('#feeds').append("<p>" + feedName + " is streaming " + (data.stream.game) + "/<p>"); 
     } 
    }); 

    }); 
}) 

を実行しましたループが終了した後に変数値を取得する(最後の値)bind関数を使用して関数に変数を渡す

var feeds = ["Towellie", "TrumpSC", "TeamSp00ky", "TwitchPlaysPokemon", "Widgitybear", "AriaBlarg", "TheMexicanRunner", "OPNerd", "rabbitbong", "Wingsofdeath", "MedryBW"]; 

$(document).ready(function() { 
    for(x = 0; x < feeds.length; x++){ 
     var feedName = feeds[x]; 
     $.getJSON('https://api.twitch.tv/kraken/streams/' + feeds[x] + '?callback=?', function(feedName, data) { 
      if (data.stream === null) { 
       $('#feeds').append("<p>" + feedName + " is offline </p>"); 
      }else{ 
       $('#feeds').append("<p>" + feedName + " is streaming " + (data.stream.game) + "/<p>"); 
      } 
     }.bind(this, feedName)); 
    } 
}); 
0

これで実現できます。

var feeds = ["Towellie", "TrumpSC", "TeamSp00ky", "TwitchPlaysPokemon", "Widgitybear", "AriaBlarg", "TheMexicanRunner", "OPNerd", "rabbitbong", "Wingsofdeath", "MedryBW"]; 

     $(document).ready(function(){ 
     var divText; 
     for(x = 0; x < feeds.length; x++){ 
      var feedName = feeds[x]; 
      $.getJSON('https://api.twitch.tv/kraken/streams/' + feeds[x] + '?callback=?', function(data) { 
      if(data.stream === null){ 
     divText = divText + '<p>'+feedName+' is offline </p>'; 
      }else{ 
     divText = divText + '<p>'+feedName+' is streaming '+(data.stream.game) +'</p>' 
     } 
     }); 
     } 
    $('#feeds').append(divText); 
    //or $('#feeds').html(divText); 

     }) 
関連する問題