在jQuery代码中执行 AJAX 请求时,我使用以下模型来显示我的加载微调器:
jQuery.ajaxSetup({
beforeSend: function() {
$('#loader').show()
},
complete: function(){
$('#loader').hide()
},
success: function() {
$('#loader').hide()
}
});
这个代码对我来说非常好用!
只有一个问题
有些请求非常简单和快速,所以加载微调器只显示几毫秒,这当然不是很漂亮。
所以我试着用setTimeout()
来显示加载微调器,我希望它只在 AJAX 请求至少需要100 ms的时候弹出,但是它不起作用。
所以我需要一些代码来延迟加载微调器,就像我上面解释的那样,这样它只会在执行“更长” AJAX 请求时弹出!
6条答案
按热度按时间a11xaf1n1#
这就是我解决您提到的功能的方法
7vhp5slm2#
这是一个老问题,但我发现了一个更好更优雅的方法。jQuery公开了一个变量
$.active
,它是当前活动 AJAX 请求的数量。该值在ajaxSend
之前增加,在ajaxComplete
之后减少。考虑到这一点,我们需要做的就是在
ajaxSend
和$.active == '1'
被触发时显示微调器,在ajaxComplete
和$.active == '1'
被触发时隐藏微调器。希望这能帮到什么人。
voase2hg3#
我所见过的常见解决方案是让throbber持续一两秒钟,即使请求完成的比这更快。
显然,这是一个以牺牲美观为代价让事情变慢的权衡,所以你是否想承受这种打击取决于具体情况。如果是一直在使用的东西,你可能最好接受丑陋的东西。如果是偶尔发生的东西,用户不会注意到额外的500英里。
wwtsj6pe4#
这应该行得通:
现在,如果您要同时触发多个请求,则需要对此进行一些改进,但希望您能了解情况。
mum43rcc5#
现在回复,因为我遇到了同样的问题,这些答案给予了我部分的解决方案。为了避免在 AJAX 请求完成后启动spinner,因为超时时间比执行脚本更宽,你需要一个向上/向下标志检查,这很简单,对我来说是工作。
6rqinv9w6#
晚到这个线程,但认为这可能是有帮助的。Bootstrap v4.4.1目前在我的应用程序中使用。我有一个模态微调器定义如下:
我注意到的是,初始DIV中的“fade”类导致当它是一个快速运行的进程时,模态不会消失,正如最初的海报所指出的。可以将Bootstrap fade类修改为更短的过渡时间,但这对我来说也不总是有效。.ajaxStop也不一致,唯一一致的是删除了fade类。
希望能有所帮助。