Вызов Jquery/Ajax с таймером

У меня есть php-страница, которая выводит строки из базы данных. Я хочу вызывать его через jquery/ajax каждые 30 секунд. Но я также хочу иметь возможность вызывать страницу в любое время, чтобы, если я добавлю запись через форму, после отправки формы я хотел, чтобы страница, вызываемая ajax, сразу же обновляла результаты. Может ли кто-нибудь указать мне правильное направление или предоставить базовый код, чтобы я мог попытаться понять это? Все еще очень новичок в jquery/ajax.


person John    schedule 28.12.2010    source источник


Ответы (1)


Если вы хотите установить что-то на таймере, вы можете использовать методы JavaScript setTimeout или setInterval:

setTimeout ( expression, timeout );
setInterval ( expression, interval );

Где expression — функция, а timeout и interval — целые числа в миллисекундах. setTimeout запускает таймер один раз и запускает expression один раз, тогда как setInterval будет запускать expression каждый раз, когда проходит interval.

Итак, в вашем случае это будет работать примерно так:

setInterval(function() {
    //call $.ajax here
}, 5000); //5 seconds

Что касается Ajax, см. ajax()метод jQuery. Если вы запускаете интервал, ничто не мешает вам вызвать тот же ajax() из других мест вашего кода.


Если вы хотите, чтобы интервал запускался каждые 30 секунд, пока пользователь не инициирует отправку формы... а затем после этого создайте новый интервал, это также возможно:

setInterval() возвращает целое число, которое является идентификатором интервала.

var id = setInterval(function() {
    //call $.ajax here
}, 30000); // 30 seconds

Если вы сохраните этот идентификатор в переменной, вы можете вызвать clearInterval(id), что остановит прогресс.

Затем вы можете повторно вызвать вызов setInterval() после того, как вы завершили отправку формы ajax.

person treeface    schedule 28.12.2010
comment
Спасибо за ответ! Итак, вы говорите, что если я использую приведенный выше код для обновления вызова ajax каждые 5 секунд, то на той же странице у меня есть форма, которую кто-то заполняет, которая получает отправку, после того, как она будет добавлена ​​​​запись, я могу вызвать ту же функцию setInterval выше, и она не будет есть 2 экземпляра этой функции, работающие одновременно? - person John; 28.12.2010
comment
Итак, вы хотите, чтобы интервал запускался каждые 30 секунд, до тех пор, пока пользователь не инициирует отправку формы... а затем создает новый интервал после этого? Это также возможно. setInterval() возвращает целое число, которое является идентификатором интервала. Если вы сохраните этот идентификатор в переменной, вы можете вызвать clearInterval(id), что остановит прогресс. Затем вы можете повторно вызвать вызов setInterval() после того, как вы завершили отправку формы ajax. - person treeface; 28.12.2010