2012-03-12 5 views
0

次のjavascriptは(毎秒更新する代わりに)最終結果を表示します。次の要素を表示するまで、どのようにgetJSON呼び出しの結果を繰り返し処理し、その結果を表示し、遅延させることができますか?jquery display + delay strategy

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 '。嫌な睡眠機能を失う。 –

+0

元の質問の非正常なコードをソリューションに置き換えることが適切でないため、編集をロールバックしました。答えがすでに投稿されているのとは違っていて満足している解決策がある場合は、それを自分で回答として投稿し、それを受け入れます。 (そうでなければ、何も間違っていないコードで何が間違っているのかを尋ねるので、あなたの質問は意味をなさない) – nnnnnn

+0

実際、彼の改訂版でも、1秒後にすぐにすべての表示が行われます。 – GoldenNewby

答えて

1

問題は、あなたの$.each()ループ内では、すべてのループの後1000msのため、一度にすべてのタイムアウトをキューに入れていることです。

$.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に設定)