Строка, отправляющая двойной запрос при выгрузке страницы

#javascript #xmpp #strophe

#javascript #xmpp #strophe

Вопрос:

Я написал клиент XMPP с помощью jQuery Strophe. Все это работает хорошо (1 на 1, присутствие, MUC и т. Д.) И Содержится в jQuery-плагине. Однако, когда страница выгружается, она отправляет 2 заключительных запроса с тем же rid. Это только недавно стало проблемой, когда я начал работать над вложением сеанса.

Вот пример консоли Firebug:

введите описание изображения здесь

Здесь я только что вошел в систему и сразу же обновил страницу. Первое сообщение, которое вы видите, — это начальная строка присутствия после входа в систему. После этого запроса начался новый запрос BOSH, чтобы поддерживать соединение с сервером открытым. Этот запрос прерывается при обновлении страницы. Пока все идет так, как я ожидал.

Однако после прерванного запроса strophe отправляет еще один запрос с тем же самым RID. Последний запрос отправляется из strophe для (я полагаю) хороших манер и не имеет отношения к проблеме. Однако его ответ указывает, что openfire (XMPP-сервер) прервал сеанс в попытке защитить учетную запись.

Я просмотрел свой код и не могу найти ни одного запроса, сделанного от моего имени. Я совершенно уверен, что strophe отправляет этот запрос. Однако это должно быть связано с тем, что я сделал, поскольку в моем первоначальном прототипе такой проблемы не было (на самом деле, мне часто приходилось вручную завершать сеансы на панели администратора, потому что я забывал закрывать их через клиент).

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

Ответ №1:

Я вернулся к рабочему прототипу, но обнаружил, что в нем также была та же ошибка. После небольшого тестирования я обнаружил, что это происходит только после того, как я немедленно обновил страницу. Если запрос был сделан до обновления страницы, ошибка не возникает. Я сообщил об этом разработчику и сделал хак, чтобы заставить его работать, пока он не будет исправлен на их стороне.

Обновить:

Я узнал, что это происходит только с Firefox. Safari и даже IE делают это правильно (т. Е. Не Выполняют двойную публикацию). Так что, возможно, это Firefox ведет себя плохо в конце концов!

ОБНОВЛЕНИЕ 2:

Я получил письмо с запросом о внесенных мной изменениях. Вот они.

В strophe.js примерно в строке 2566 измените

 sendFunc();
  

Для

 if (req.sends == 0) {
   sendFunc();
}
  

Комментарии:

1. у меня это сработало, я не рекомендую менять файл библиотеки, но у меня не было выбора, это сделало свое дело. @Mike