2017-10-18 142 views
0

使用多個AJAX請求的索引我寫了這個代碼:響應處理

$(document).ready(function() { 
    var streamNames = [ 
    "ESL_SC2", 
    "OgamingSC2", 
    "nl_kripp", 
    "nl_kripp", 
    "freecodecamp", 
    "storbeck" 
    ]; 

    for (var i = 0; i < streamNames.length; i++) { 
    $.getJSON(
     "https://api.twitch.tv/kraken/streams/" + 
     streamNames[i] + 
     "?client_id=.......", 
     function(data) { 
     if (data.stream == null) { 
      $("#status" + [i]).text("Offline"); 
     } else { 
      $("#status" + [i]).text("Online"); 
      console.log(i) 
     } 
    ; 

這裏有發生2個問題。

1. JSON數據來自隨機,而不是在陣列的順序。

2.i在表達式中總是6(最後一個計數)。

任何人都可以幫助我弄清楚爲什麼會發生這種情況?

+0

JSON沒有「秩序」(這是一個無序集合),並有6個流,讓你在'i'得到6。這些對我來說都不是一個'問題';這就是你的代碼如何設計的。 –

+0

,但它應該得到第一個流光[i = 0],第二個流光[i = 1]等等,但是當我登錄它時,我會得到類似於4,3,5,6,1,2的流光 – Kostis

+0

問題是你一個接一個地發送請求,但不檢查數據何時實際返回。如果您特別想按順序檢查它們,您希望在執行[**回調**](http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/)之後每個請求在其中進行下一個請求。 –

回答

0

var葫蘆,所以你的代碼就相當於

var i; 
for (i = 0;... 

您可以在這裏使用let解決這個問題。 for (let i = 0; ...

的JSON不能保證回來以任何順序。這就是事件循環和異步性的本質。但對於let,至少i對每個循環塊都應該是唯一的。