Запуск / остановка вызова Ajax через Jquery - PullRequest
1 голос
/ 22 февраля 2011

У меня есть веб-страница с 2 вкладками. Эти вкладки показывают / скрывают div при нажатии. Обе вкладки используют jquery для вызова ajax скрипта php для отображения результатов из другой базы данных. Итак, вкладка 1 показывает список продуктов питания, а вторая вкладка показывает список цен. Он настроен на автоматическое обновление каждые 30 секунд. Мой вопрос заключается в том, что, когда я нажимаю между двумя вкладками, я предпочитаю, чтобы вкладка, которая не была нажата, останавливает вызов ajax, поэтому выполняется только один вызов ajax, в основном для целей оптимизации. Как бы я поступил так? Буду ли я использовать setInterval, чтобы он запускал вызов ajax первой вкладки каждые 30 секунд, а затем при нажатии на другую вкладку вызывается функция для запуска clearInterval с идентификатором, с которым работал первый setinterval? Затем, наоборот, если щелкнуть первую вкладку, он очищает интервал для вызова второй вкладки Ajax?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Многократное вытягивание по сравнению с вытягиванием, когда что-то новое, является достойной дискуссией, но я пока держусь от этого подальше.

На вкладках пользовательского интерфейса jQuery есть способы привязки поведения при смене вкладок. Я бы подключил его так, чтобы, когда вкладка стала видимой, она заполнялась содержимым сервера, и интервал запускался, чтобы повторить это поведение. Я бы сохранил возврат функции JJuery AJAX (сам XHR в более старом jQ, оболочку jQ XHR в 1.5) и возвращенный идентификатор таймера, полученный в результате запуска интервала.

Затем, всякий раз, когда загружается новая вкладка, я вызываю abort () для XHR / wrapper и clearInterval для идентификатора таймера, затем делаю то же самое, что я делал для предыдущей вкладки в новой - заполнение через AJAX. (сохранение XHR) и начало интервала (сохранение идентификатора).

0 голосов
/ 22 февраля 2011

Как правило, нет причин для того, что вы делаете.

Я бы предпочел, если у вас есть что загрузить, которое нужно загрузить через некоторое время, вы должны вызвать обе вкладки, а только спросить, изменилось ли что-то. Допустим, вы вызываете сервер каждые 10 секунд, если что-то меняется, возвращая false или true не так уж и много, и если возвращается yes, просто синхронизируйте оба элемента.

если нет необходимости синхронизировать оба элемента, почему вы просто не синхронизируете их при нажатии на вкладку?

Для удобства пользователей лучше часто запрашивать изменения, но синхронизировать контент только при необходимости.

И если вы все это сделаете, не используйте setInterval, а setTimeout, и в вашей функции снова вызывается setTimeout, setInterval не так хорош; -)

...