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

我得到一个AJAX JSON,我想通过创建时间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

注释OP。roo t问题在于你的'$ .each()'循环或多或少地在本讨论中瞬时运行。你在循环的每次迭代中设置一个超时值,这个值是相同的值,这意味着第一项可以在循环开始后的3000ms处执行,第二个在循环开始后的3001ms处执行,第三个在3002ms处等等(这里我通常等同于单个循环迭代为1毫秒,这可能比实际循环迭代时间慢)。 –

+0

是的,现在我明白,但例如,我怎么能做下一个。我想要一个随机的时间问题是如果一些数字在第一次迭代2s给我,第二次给我s1,所以第二次迭代首先出现!我希望第二秒钟(随机时间)等待最后一秒钟。我能解释一下自己吗? –