2016-05-23 4 views
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); 
      }); 
     } 
    }); 
}); 

Я получаю JSON с помощью AJAX, и я хочу показать каждое сообщение, создавая время 1 или 2 секунды, он работает, но только в первый раз, но после этого, все сообщения появляются сразу.

Если кто-то может помочь мне, пожалуйста, понять, что происходит.

Спасибо, ребята, я продолжу поиск. :(

+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()' работают более или менее мгновенно для целей этого обсуждения. Вы устанавливаете тайм-аут на каждой итерации цикла, который является одним и тем же значением, то есть первый элемент может выполняться через 3000 мс после начала цикла, второй - при 3001 мс после начала цикла, третий - при 3002 мс и т. Д. (Здесь я обычно приравниваю к одному циклу итерация занимает 1 мс, что, вероятно, медленнее, чем фактическое время итерации цикла). –

+0

Да, теперь я понимаю, но, например, как я могу сделать следующий. Я хочу случайное время, проблема, если какой-то номер дает мне сначала итерацию 2s, второй iter дает мне s1, поэтому первая итерация первой появляется! Я хочу, чтобы вторая секунда (случайное время) после последнего. я сам объясню? –

Смежные вопросы