Дублирование ajax-запроса

Недавно заметил у себя, что при регистрации, авторизации и прочих действий из модальных окон на сервер следует два запроса подряд с одинаковыми параметрами (см. скриншот). На livestreet.ru ровно точно также.



Расстановка брекпойнтов в скриптах с целью выяснить, почему же второй раз идет запрос, ничего не прояснила.
Функция, которая биндится на submit формы (в которой, например, вызывается ls.user.login()) вызывается один (первый) раз. А сам ls.user.login() два раза. При чем, даже если очистить код функции ls.user.login(), то она все равно вызовется два раза. Следовательно, дело не в ней.
Будем копать дальше.

18 комментариев

avatar
О проблеме знаем, это из-за новых модальных окон. Решается через вынос js из модального окна логина в отдельный js файл
  • ort
  • 0
avatar
а это удобно? Для каждого модального окна свой файл?
avatar
имеет ввиду код в jQuery.ready(), сейчас он используется только в одном модальном окне
в LS подобный код находится в template.js
avatar
кстати, не думали скрипты не грузить вначале, а перейти на bootstrap загрузку по событиям с помощью какой-нибудь из библиотек: RequireJS или StealJS&?
avatar
не думали
они же мержатся в один файл, а дальше из кеша браузера
avatar
ну тут даже дело не скорости, а в удобстве. При наличии, например, модальных окон, будет автоматом подтягиваться файл с js модулем и их инициализировать. Не надо будет в шаблонах прописывать каждый раз.
Собственно уже подумали про все, например, http://javascriptmvc.com
Неудобство в том, что на данный момент в LS собственная структура js с хуками.
avatar
ЖС загружается один раз и всегда готов, иначе может быть ситуация когда будет задержка на реакцию в связи с загрузкой скрипта.
avatar
Я неверно подал суть. Наверное, тут лучше объяснено про подход AMD
avatar
AMD подход свойственен интерфейсам построенным на javascript фреймфорках, и как правило такие сайты являются одностраничниками, поэтому подход с дозагрузкой библиотек оптимален в ситуациях когда пользователь не ушел дальше одной страницы, либо в ситуациях когда идет дозагрузка не просто скриптов а отображения для генерации остальных страниц.
В livestreet не комильфо использовать данный подход, все сделано более чем грамотно.
avatar
раньше js был в том файле, где модальное окно подключалось
avatar
это в транковой версии?
avatar
ну там где новые модальные окна с прокруткой, даже прямо на livestreet.ru
avatar
что-то не припомню таких…
avatar
Вот есть тред на гите
avatar
спасибо. вижу.
avatar
кстати из-за дубля теперь слетает запоминание авторизации.
Кука устанавливается от первой попытки, а в базу пишется id от второй.
avatar
Решается через вынос js из модального окна логина в отдельный js файл
Подскажите pls кто-нибудь как это сделать.
avatar
В папке modals во всех шаблонах все скрипты типа:
<script type="text/javascript">
		jQuery(function($){
			$('#popup-login-form').bind('submit',function(){
				ls.user.login('popup-login-form');
				return false;
			});
			$('#popup-login-form-submit').attr('disabled',false);
		});
</script>

повыносить, например, в template.js
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.