Перезагрузите страницу с помощью jquery только после завершения предыдущей перезагрузки - PullRequest
2 голосов
/ 01 сентября 2010

У меня есть страница, которая обновляется каждые 10 секунд.Страница запускает серию запросов к базе данных и показывает результаты.

Проблема в том, что иногда выполнение запросов занимает до минуты, но страница обновляется каждые 10 секунд, поэтому я получаю 6 наборов базы данных.Запросы выполняются и так далее.Я знаю это, когда регистрирую действие в базе данных с указанием времени начала и окончания запросов.

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

Как я могу изменить его, чтобы обновление происходило только после того, как страница завершила обработку запросов или 10 секунд, в зависимости от того, чтосамый длинный?

Ответы [ 4 ]

2 голосов
/ 01 сентября 2010

Почему бы просто не установить флаг и пропустить перезагрузку, если последний еще не закончил? Что-то вроде следующего (не проверено, но показывает основную идею)

var loading = false;

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

       loading = true;
       $("#content").load('myurl.php?id=1', function() {
           loading = false;
       });                        
    }, 10000);                         
});
1 голос
/ 01 сентября 2010

Вместо периодического обновления страницы извлекайте данные с помощью вызова 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);          
         }
    });

}
1 голос
/ 01 сентября 2010

Вы можете использовать setTimeout вместо этого и перезагрузить таймер после завершения

0 голосов
/ 01 сентября 2010

Вы можете ставить Ajax-запросы в очередь с помощью плагина, например AjaxQueue .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...