Javascript 仅当AJAX请求需要一定时间时才执行代码?
在我的web应用程序中,我使用Javascript 仅当AJAX请求需要一定时间时才执行代码?,javascript,ajax,jquery,Javascript,Ajax,Jquery,在我的web应用程序中,我使用$.ajax()请求从数据库加载数据并在浏览器中显示。在执行请求期间,我会显示一条加载结果…消息,如下所示: $.ajax({ // ... beforeSend: function() { $('#loading-results-message').show(); }, complete: function() { $('#loading-results-message').hide();
$.ajax()
请求从数据库加载数据并在浏览器中显示。在执行请求期间,我会显示一条加载结果…
消息,如下所示:
$.ajax({
// ...
beforeSend: function() {
$('#loading-results-message').show();
},
complete: function() {
$('#loading-results-message').hide();
}
});
这个很好用。但是,如果没有太多数据要加载,则请求只需几分之一秒。在这种情况下,消息也仅显示一小部分秒。这种动画发生得太快,很难识别。因此,如果仅当请求需要一定的时间(即至少几秒钟,但不只是几秒钟)时才可以显示消息,那就太好了。这有可能吗?顺便说一下,如果有必要的话,我正在服务器端使用Django 使用
setTimeout
建立计时器,在请求完成时取消计时器:
var desired_delay = 2000;
var message_timer = false;
$.ajax({
// ...
beforeSend: function() {
message_timer = setTimeout(function () {
$('#loading-results-message').show();
message_timer = false;
}, desired_delay);
},
complete: function() {
if (message_timer)
clearTimeout(message_timer);
message_timer = false;
$('#loading-results-message').hide();
}
});
文档
在MDN上-setTimeout
- MDN上的clearTimeout
- 我支持@chris的解决方案。但这也值得你花点时间去研究
这将使您不必为每个请求写入超时。如果延迟接近执行时间,您将得到相同的效果!我只会延迟隐藏功能,以便至少持续最短的时间来读取消息。如果脚本在计时器之前完成,则不会显示任何消息。这就是操作的目标。如果脚本花费的时间超过超时时间,则会显示消息。如果时间真的很接近,那就没有任何问题了——没有“onAlmostComplete”事件,也没有确定请求是否将返回的方法。@Chris:我现在有点希望有一个
onAlmostComplete
事件-P@Chris非常好,这正是我想要的。:)谢谢只是一个小问题:我的IDE(IntelliJ IDEA)说关于行clearTimeout(message\u timer)
如下:参数类型Boolean不能分配给参数类型Number。
知道这里出了什么问题吗?尽管如此,代码还是有效的。@PeterStahl:那是因为类型转换message\u timer
以布尔值启动,但它变为一个数字,并且您的IDE没有意识到类型确实发生了变化。您可以忽略它,或者使message\u timer=0
而不是=false
。