当前位置: 首页 > 面试题库 >

如果ajax花费不到X秒,如何延迟进度显示?

陆晓博
2023-03-14
问题内容

我在页面上有几个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 function()之类的东西来进行实际的Ajax调用,这主要是因为某些结果可以非常快速地返回并且不需要任何进度指示器。更多的往往不是..进度应该 不会 显示。 大多数 ajax请求在5秒内完成,只有极少数的请求可能需要10到20秒。

  • 已经 增加了去除“加载”到Ajax调用功能齐全()的。可以肯定的是,ajax完成后,加载程序就消失了。但是,如果ajax在到达任何setTimeout()值之前已完成(然后加载器随后在不应该加载的情况下出现),则此操作也将失败。

如果ajax花费X秒或更长时间,我只想对元素进行CSS更改…可以做到吗?

在AJAX请求中是否可以计时?


问题答案:

setTimeout()具有这个不错的功能,您可以在其中获取超时参考并取消超时。

var ajaxLoadTimeout;
$(document).ajaxStart(function() {
    ajaxLoadTimeout = setTimeout(function() { 
        $("#loader").css("display","block");
    }, 5000);

}).ajaxSuccess(function() {
    clearTimeout(ajaxLoadTimeout);
    $("#loader").css("display","none");
});

这样可以防止超时,而不是等待超时,并且如果已调用完成,则什么也不做(如Jacob的回答)。



 类似资料:
  • 我正在尝试用Java做一些事情,我需要在while循环中等待/延迟几秒钟。 我想构建一个step sequencer,我是Java新手。有什么建议吗?

  • 问题内容: 我正在尝试用Java做某事,而我需要一些东西在while循环中等待/延迟几秒钟。 我想构建一个步进音序器,并且对Java还是陌生的。有什么建议么? 问题答案: If you want to pause then use java.util.concurrent.TimeUnit: TimeUnit.SECONDS.sleep(1); TimeUnit.MINUTES.sleep(1);

  • 问题内容: 我想在两次通话之间延迟5秒…我该如何在jQuery中执行此操作…似乎jQuery对此不起作用… 问题答案: 您可以使用普通的javascript,这将在5秒后调用一次your_func: 如果您的函数没有参数且没有显式接收器,则可以直接调用我曾经用过一个插件。它具有和方法。

  • 问题内容: 有没有办法在不使用JavaScript的情况下延迟:Hover事件?我知道有一种方法可以延迟动画,但是在延迟:hover事件上我什么都没看到。 我正在建立菜单之类的-鱼。我想模拟hoverIntent的作用,而不增加额外的JS重量。我更喜欢将其视为渐进式增强,而不是将JS作为使用菜单的要求。 菜单标记示例: 问题答案: 如果效果是基于CSS的,则可以使用过渡来延迟所需的效果。 例如 这

  • 问题内容: 如何在Python中进行时间延迟? 问题答案: 这是另一个示例,其中某件事大约每分钟运行一次:

  • 我需要一个队列来处理延迟x小时后的消息。并且我需要一个数据驱动的、所有基于事件的方法,不使用任何调度器等等。 场景是,我将一些实时数据发送到SNS主题,然后从那里发送到不同的SQS队列,由不同的AWS Lambda函数使用。 其中一个Lambda函数需要处理延迟3小时后的消息。不过,送货最长延迟15分钟。如果我第一次读取消息,它将自动从SQS中删除,因为我正在使用事件源映射触发器来调用lambda