2016-12-01 105 views
0
<script> 

    //GET THE DATA 
    $.getJSON('https://api.tfl.gov.uk/line/mode/tube,overground,dlr,tflrail/status', function(data) { 

     var counter = 1; 
     console.log(data); 

     $.each(data, function(index,station) { 

      $.each(station.lineStatuses, function(index,value2) { 

       if (counter <= 16) { 
        if (station.name != 0) { 
         var stationName = station.name; 
         var stationStatus = value2.statusSeverityDescription; 
         var stationStatusReason = value2.reason; 

         $("#stationStatus").append(
          $("<div>") 
          .addClass("row")); 

         $("#stationStatus").empty().append(
          $("<div/>") 
          .addClass("stationName col-sm-6") 
          .append(stationName)); 

         $("#stationStatus").append(
          $("<div/>") 
          .addClass("stationStatus col-sm-6") 
          .append(stationStatus)); 

         if (stationStatusReason != undefined) { 
          $("#stationStatus").append(
           $("<div/>") 
           .addClass("stationStatusReason col-sm-12") 
           .append(stationStatusReason)); 
         } 
        counter++; 
        } 
       } 
      }); 
     }); 
    }); 
</script> 

我创建了一些代码来检索一些数据使用getJSON。添加延迟 - getJSON和jQuery

一旦我有数据循环显示内容。我的问题是我可以显示所有的内容,但我希望在每个循环之间添加一个延迟,因此它显示的有点像新闻动态。

我想我快到了,但我目前的形式代码只显示数组中的最后一项。如果我逐步使用devtools,它似乎在做正确的事情,但我不知道如何自动添加延迟?

我尝试使用setTimeout和类似的,但它被忽略?

+0

可以重新格式化你的代码,包括你的setTimeout尝试?我在这里发布了重新格式化http://pastebin.com/Df3F2Y0C –

+0

作为对你的问题的快速回答,setTimeOut设置了'将来'的超时时间,所以如果你将所有的超时设置为相同的值,那么他们会在同一时间进行处理。所以如果你想错开更新,只需增加setTimeOut *计数器 –

回答

1

所有setTimeout都在几乎相同的实例上运行;然后 作为,

setTimeout(foo(),3000) 
setTimeout(foo(),3000) 
setTimeout(foo(),3000) 

将运行3 FOO()一切都在一次,3秒后。 为了让他们以后运行简单地将其更改为

setTimeout(foo(),3000*0) 
setTimeout(foo(),3000*1) 
setTimeout(foo(),3000*2) 

然后你会得到你的功能,在跑了0,1,2秒。

在你的榜样的形式,

$.getJSON('https://api.tfl.gov.uk/line/mode/tube,overground,dlr,tflrail/status', function(data) { 
    function readLineStatus(station,lineStatus){ 
    if (counter <= 16) { 
     if (station.name != 0) { 
     console.log(station); 
     console.log(lineStatus); 
     } 
     counter++; 
     console.log('Counter: '+counter); 
    } 
    } 
    function readStation(station,timeout){ 
    return function(){ 
     $.each(station.lineStatuses, function(index,lineStatus) { 
     readLineStatus(station,lineStatus) 
     }); 
    }; 
    } 
    var counter=1; 
    $.each(data, function(index,station) { 
    console.log('station index:'+index); 
    var timeout = 500*index; 
    setTimeout(readStation(station,timeout), timeout); 
    }); 
}); 
+0

辉煌!很棒。 –

+0

没问题,这个问题已经很好的定义了,我很容易测试你的问题! (你很可能会继续从这样的问题中得到很好的答案)既然你在这里是新人,请不要忘记标记接受的答案,这对解决问题最有帮助。另请参阅[如何接受答案的工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –