2012-03-12 109 views
0

以下javascript显示最终结果(而不是每秒更新一次)。我如何遍历getJSON调用的结果,显示结果并延迟,直到显示下一个元素?jquery显示+延迟策略

function display(state) { 
    for (var i=0; i < state.length; i++) { 
    $('#someDiv' + i).text(state[i]); 
    } 
} 

$.getJSON('/getdata', function(data) { 
    $.each(data, function(key, val) { 
    setTimeout(function(){display(val)}, 1000); 
    }); 
} 
+1

使用'的setTimeout '。失去那种可恶的“睡眠”功能。 – 2012-03-12 01:05:26

+0

我回滚了您的修改,因为用解决方案替换原始问题中的非工作代码是不合适的。如果你有一个解决方案,你很满意这与已经发布的答案不同,然后将它作为答案自己发布并接受。 (否则,你的问题是没有意义的,因为它是问什么是错有什么不对的代码。) – nnnnnn 2012-03-12 01:33:04

+0

其实,即使他的修订案文将简单地做所有的显示器在一次后1秒。 – GoldenNewby 2012-03-12 01:37:52

回答

1

的问题是,在你的$.each()循环您队列中的所有超时一次,全部用于循环后1000毫秒。以修复最简单的方法如下:

$.getJSON('/getdata', function(data) { 
    $.each(data, function(key, val) { 
    setTimeout(function(){display(val)}, 1000 * key); 
    }); 
}); 

注意到如果data是一个数组,因而key是整数索引只会工作。如果data是一个对象,key不是整数索引,你可以这样做:

$.getJSON('/getdata', function(data) { 
    var i = 0; 
    $.each(data, function(key, val) { 
    setTimeout(function(){display(val)}, 1000 * i++); 
    }); 
}); 

(设置i至1时,首先,如果你不想在第一次更新立即发生)