响应处理

响应处理

问题描述:

使用多个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/)之后每个请求在其中进行下一个请求。 –

var葫芦,所以你的代码就相当于

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

您可以在这里使用let解决这个问题。 for (let i = 0; ...

的JSON不能保证回来以任何顺序。这就是事件循环和异步性的本质。但对于let,至少i对每个循环块都应该是唯一的。