【发布时间】:2016-05-22 19:51:45
【问题描述】:
我在一个页面上有几个 AJAX 调用。有些会立即完成,有些则需要一些时间——这一切都取决于点击的内容。
我想添加一个“加载器”,它会在 AJAX 处理结果时在 X 秒后显示。
我有一个加载器在工作:
$(document).ajaxStart(function() {
$("#loader").css("display","block");
}).ajaxSuccess(function() {
$("#loader").css("display","none");
});
这个函数。
但是,当 AJAX 请求很快时,它会在屏幕上闪烁......就像在眨眼之间。除了发生的“闪烁”之外,它效果很好。因此,我试图将加载器 css 更改延迟几秒钟,以便快速结果不会导致“闪烁”。
我已经尝试使用 setTimeout 和 jQuery 队列来延迟事情了。唉:
$(document).ajaxStart(function() {
$("#loader").queue(function(){
$(this).delay(5000);
$(this).css("display","block");
$(this).dequeue();
});
}).ajaxSuccess(function() {
$("#loader").css("display","none");
});
或:
$(document).ajaxStart(function() {
setTimeout(function() {
$("#loader").css("display","block");
}, 5000);
}).ajaxSuccess(function() {
$("#loader").css("display","none");
});
或:
$(document).ajaxStart(function() {
$("#loader").delay(5000).css("display","block")
}).ajaxSuccess(function() {
$("#loader").css("display","none");
});
但我遇到的问题是,任何在 ajax 启动时延迟 css 更改的尝试通常都会导致延迟......然后负载出现(在 ajax 完成后)。
所以页面加载了 AJAX 数据,然后 5 秒后......加载器出现了。
有没有好办法告诉 ajaxstart() 函数在执行前等待 X 秒?
我不一定想使用类似 onBefore 函数()之类的东西来进行实际 ajax 调用的这一部分,主要是因为某些结果很快返回并且不需要任何进度指示器。通常情况下.. 应该不显示进度。 大多数 ajax 请求在 5 秒内完成,只有少数可能需要 10-20 秒。
我已经在 ajax 调用中将“加载器”的删除添加到了完整的 function() 中。只是为了确定 ajax 完成后加载器会消失。但是,如果 ajax 在达到任何 setTimeout() 值之前完成,这也会失败(然后加载程序在不应该出现的情况下出现)。
如果 ajax 需要 X 秒或更长时间,我只想对元素进行 css 更改...可以这样做吗?
有没有办法在 AJAX 请求中计时?
【问题讨论】:
-
编辑了我的答案,应该可以解决你的新问题
-
优秀~它确实解决了它@JacobGray。 谢谢。
标签: jquery css ajax delay settimeout