我正在搞乱jQuery的AJAX函数,并试图模拟真实服务器如何延迟我在本地主机上获得的平滑数据请求。
所以我编写的代码类似于:
$('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(' ');
});
});
});
我在这里基本上做的是将$ .post方法延迟2秒,以便可以看到“发布...”消息。 当2秒完成时,我希望用我得到的响应改变文本,保持静止1秒,然后我希望它淡出。
第一个延迟工作完美,Ajax调用工作也很完美,问题是 - 由于某种原因,第二个延迟没有被读取,响应消息一旦显示就拒绝消失:)
我的问题是为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
您需要出队才能处理队列中的下一件事。
http://api.jquery.com/jQuery.dequeue/
编辑:或next
1.4或更高:
在jQuery 1.4中的功能 调用是在另一个函数中传递的, 作为第一个论点,那个时候 被叫自动出列下一个 item并保持队列移动。您 会像这样使用它:
$("#test").queue(function(next) {
// Do some stuff...
next();
});
答案 1 :(得分:0)
您可以尝试我的waitForIt插件:
http://jsfiddle.net/maniator/Ad3pv/
你要在第二部分做的就是:
$('#response').html(response).waitForit({
function: 'fadeOut',
options: 'slow',
timeOut: 1000
});