Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当AJAX请求需要一定时间时才执行代码?_Javascript_Ajax_Jquery - Fatal编程技术网

Javascript 仅当AJAX请求需要一定时间时才执行代码?

Javascript 仅当AJAX请求需要一定时间时才执行代码?,javascript,ajax,jquery,Javascript,Ajax,Jquery,在我的web应用程序中,我使用$.ajax()请求从数据库加载数据并在浏览器中显示。在执行请求期间,我会显示一条加载结果…消息,如下所示: $.ajax({ // ... beforeSend: function() { $('#loading-results-message').show(); }, complete: function() { $('#loading-results-message').hide();

在我的web应用程序中,我使用
$.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(); 
    }
});
文档

  • setTimeout
    在MDN上-
  • 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