2016-05-23 6 views
2

こんにちは、私のタイミング機能が動作していない理由は分かりません。私はAJAXでJSONを取得し、私は時間1または2秒を作成することにより、それぞれのメッセージを表示したい、それは動作しますが、ただ、初めて...遅延jqueryが動作しません

$(document).ready(function() { 
    $.ajax({ 
     type: 'GET', 
     url: 'conversation.json', 
     dataType: 'json', 
     success: function (data) { 
      var conversation = data.conversation1; 
      $.each(conversation, function(i, user) { 
       setTimeout(function() { 
        $('<li>').attr({ 
         class : 'list-group-item', 
        }).text(user.nombre + " : " + user.text). 
        appendTo('#messages'); 
       }, 3000); 
      }); 
     } 
    }); 
}); 

を次のコードを考えてみたが、その後、すべてのメッセージ一度に表示されます。

もし何かが私に何が起こっているのか理解してください助けることができます。

ありがとう、私は検索を続けます。 :(

+0

あなたは会話の各ユーザに対して3秒間のタイムアウトを設定しています。タイムアウトはすべて3秒後に期限切れになります(それ以降はすべて同時に表示されます) – ochi

+0

これを解決できましたか?私の答えはあなたを正しい方向に向けることができますか? – scniro

答えて

4

ちょうどそれは、各メッセージに対してインクリメント遅延として表示されるようにするには、反復回数によって、あなたの.eachループでタイムアウト遅延を掛け、以下を守って...

$.each(conversation, function(i, user) { 
    setTimeout(function() { 
     $('<li>').attr({ 
      class : 'list-group-item', 
     }) 
     .text(user.nombre + " : " + user.text) 
     .appendTo('#messages'); 
    }, 3000 * (i + 1)); // 3000, 6000, 9000 etc. 
}); 

JSFiddle Link - 。簡素化デモ

+0

NOte to OP。問題は、あなたの '$。each()'ループがこの議論の目的のために多かれ少なかれ瞬時に実行されるということです。同じ値であるループの各繰り返しでタイムアウトを設定しています。つまり、最初の項目はループ開始から3000ms後に実行され、2番目はループ開始後3001msで、3番目は3002msで実行されます(ここでは、実際のループ反復時間よりも遅い可能性があります)。 –

+0

今私は理解していますが、例えばどうやって次のことをすることができますか?私は最初の反復2秒でいくつかの数字が私に与えられた場合、2番目のiterは私にs1を与えるので、問題があるランダムな時間が欲しいです!私は最後の後に2秒待つ(ランダムな時間)したい。私は自分自身を説明するのですか? –

関連する問題