2011-05-09 88 views
5

我正在搞乱jQuery的AJAX功能,并试图模拟真实的服务器如何延迟我在本地主机上获得的其他流畅的数据请求。双jQuery延迟问题()

所以我写的代码,它类似于此:

$('form').submit(function (event) { 
    event.preventDefault(); 

$('#response').html('<p>Posting...</p>').fadeIn().delay(2000).queue(function() { 
     $.post (
     'some_url.php', 
     {/*values here*/}, 
     function (response) { 
      $('#response').html(response).delay(1000).fadeOut('slow'); 

      //The line below is to reset the form element 
      $('input[type="text"], textarea').val(' '); 
     }); 
    }); 
}); 

我基本上做的是在这里我用2秒延迟$。员额方法,使“发帖......”的消息可以看出 当2秒完成后,我希望文本可以随我得到的响应而改变,保持静止1秒,我希望它淡出。

第一次延迟完美,Ajax调用完美,问题是 - 由于某种原因,第二次延迟未被读取,并且响应消息一旦显示,拒绝消失:)

我的问题是为什么会发生这种情况,我该如何解决?

+0

+1有趣的问题... – pixelbobby 2011-05-09 18:56:38

+2

我不知道延迟方法,但它似乎是一个更精确的http请求延迟复制将在服务器端完成,通过包括某种形式的sleep()或无论在你的ajax响应代码中。 – 2011-05-09 19:00:28

回答

1

您需要出队才能处理队列中的下一件事。

http://api.jquery.com/jQuery.dequeue/

编辑:或者在1.4以上next

在jQuery的1.4这是 调用另一个函数传递, 作为第一个参数的功能,即当 称为自动离队下一个 项目并保持队列移动。您 会使用它,像这样:

$("#test").queue(function(next) { 
    // Do some stuff... 
    next(); 
}); 

来自:http://api.jquery.com/queue/

+0

谢谢,我用next()解决了它; :) – Maverick 2011-05-09 19:12:22

+0

@Husar,选择了一个答案,因为我张贴我的:-P – Neal 2011-05-09 19:13:56

0

你可以试试我的waitForIt插件:

http://jsfiddle.net/maniator/Ad3pv/

你将不得不在第二部分做是:

$('#response').html(response).waitForit({ 
    function: 'fadeOut', 
    options: 'slow', 
    timeOut: 1000 
});