Остановите Prototype.js Ajax.PeriodicalUpdater при выходе пользователя - PullRequest
1 голос
/ 22 августа 2009

У меня есть список «онлайн-пользователей», который я обновляю каждые 30 секунд с помощью Ajax.PeriodicalUpdater из prototype.js.

Существует проблема, заключающаяся в том, что если у пользователя есть две вкладки / окна, открытые с сайтом, и выходит из системы на одной из них, PeriodicalUpdater не отменяется.

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

Я пользуюсь сессиями PHP, и я действительно не могу разобраться в этом.

Кто-нибудь из вас, ребята, может указывать мне правильное направление?

Ответы [ 2 ]

0 голосов
/ 22 августа 2009

Я хотел бы рассмотреть изменение метода, возвращающего результаты, чтобы он не требовал аутентифицированного сеанса для доступа к нему, но он возвращает действительную информацию только при наличии аутентифицированного сеанса. В противном случае он возвращает значение, указывающее, что обновления должны быть прекращены, и соответствующее сообщение для отображения в блоке вашего онлайн-пользователя. Это будет означать, что вам, вероятно, придется вместо этого возвращать JSON - это неплохо - и либо объединить его с фрагментом HTML как часть JSON, либо просто сконструировать HTML на клиенте из данных JSON (лучше IMO, поскольку вид является правильным местом для разметки).

0 голосов
/ 22 августа 2009

При создании PE сохраните ссылку на него:

// At global scope, or ideally if you have a namespaced object, use that
var thePE;

// Where you create the PE
thePE = new PeriodicalExecuter(yourFunction, 3);

И когда вы хотите, чтобы он остановился, скажите ему, чтобы он остановился (при условии, что он был запущен):

if (thePE) {
    thePE.stop();
    thePE = undefined;
}

(PeriodicalExecuter # stop docs здесь .)

...