逐步通过json结果,每次之间有延迟?

时间:2015-09-29 17:34:25

标签: jquery foreach each

我正在加载JSON文件并对结果执行$.each。但是,我希望在处理JSON数据中的每个项目之间有一段延迟。我有以下代码,但它等待1000毫秒,然后一次输出所有item.time值。

   $.getJSON("data/data.json", function() {
       }).done(function(d) {
       console.log("Got JSON");
       $d.each(function(i, item){
           setTimeout( function(){
               series.append(item.time, item.value);
               console.log(item.time)}, 1000)
       });
   });

2 个答案:

答案 0 :(得分:3)

尝试以下操作 - 对结构的某些部分进行了一些更改。

不幸的是,由于没有任何数据集,没有测试它。

$.getJSON( "data/data.json", function() {
    console.log( "success" );
}).done(function(data) {
    $.each( data, function( i, item ) {
        setTimeout(function () {
            series.append(item.time, item.value);
            console.log(item.time)
        }, i * 1000);
    });
})

添加索引元素以随着每个元素的增加而增加,因为延迟需要按时间顺序增长。

示例:

假设您有10个数据集,现在使用$.each函数,您可以遍历这些数据并将正确的元素附加到DOM(简单...)。

现在,如果你想在每个元素之间添加一个暂停,以便加载第一个元素,然后在1秒后加载下一个元素,则不能使用静态 1000ms 延迟。您需要在数据集下降时增加数量。否则,它只会等待 1000ms ,然后同时显示所有内容。

要将它们分隔开,并在$.each函数中,您将索引作为可以使用的回调。如此简单的实现只是时间(*)超时因此它以 1000ms 开始,然后下一个将 2000ms (但距离第一个只有一秒钟的延迟)元素)。

答案 1 :(得分:0)

将您的通话更改为setTimeout:

       setTimeout( function(){
           series.append(item.time, item.value);
           console.log(item.time)}, i * 1000)

同时调用所有setTimeout(在循环中),从现在起它们都会触发执行到1000。要将它们分开,只需将延迟乘以索引 - > 1000 *我,你会得到理想的结果。