仅在以前的重新加载完成时使用jquery重新加载页面

时间:2010-09-01 11:54:23

标签: jquery refresh

我有一个页面,目前每10秒刷新一次。该页面运行一系列数据库查询并显示结果。

问题在于,有时查询需要一分钟才能运行,但页面仍然每10秒刷新一次,因此我最终会运行6组数据库查询,依此类推。我知道这一点,因为我使用查询的开始和结束时间记录数据库中的操作。

$(document).ready(function() {
var refreshId = setInterval(function() {
       $("#content").load('myurl.php?id=1');                        
    }, 10000);                         
});

如何更改它以便刷新仅在页面处理完查询时或10秒内以最长者为准?

4 个答案:

答案 0 :(得分:2)

为什么不设置一个标志并跳过重新加载,如果最后一个尚未完成?类似下面的内容(未经测试但显示基本想法)

var loading = false;

var refreshId = setInterval(function() {
       if (loading) 
           return;

       loading = true;
       $("#content").load('myurl.php?id=1', function() {
           loading = false;
       });                        
    }, 10000);                         
});

答案 1 :(得分:1)

您可以使用setTimeout代替并在完成时重新加载计时器

答案 2 :(得分:1)

不是定期刷新页面,而是通过AJAX调用获取数据,并在完成时重新安排刷新。

在伪代码中:

// Set initial timeout, 10 seconds
var refTimeout = setTimeout(refreshData, 10000);

function refreshData ()
{
    // Remove timeout, we won't be called again until AJAX call is complete
    clearTimeout (refTimeout);

     $.ajax ({url: 'mydatasource.php', data : { ... },
         success : function (data) {
         // Render data into content area...

         // Set timeout so we'll be called again in 10 seconds
         refTimeout = setTimeout (refreshData, 10000);          
         }
    });

}

答案 3 :(得分:0)

您可以使用AjaxQueue等插件对ajax请求进行排队。