2012-03-12 153 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時,首先,如果你不想在第一次更新立即發生)