@Margo1964

Как упростить jQuery код в примере?

Есть плагин для лоада страниц по AJAX https://github.com/defunkt/jquery-pjax
Проблема в том, что он обновляет только один контейнер на странице, а нужно несколько.
Приведенный ниже код работает, но он кривой (Второй контейнер обновляется с задержкой). Как можно оптимизировать, чтобы контейнеры подгружались единовременно?
Если убрать таймаут, подгружается только второй контейнер.

$(document).on("click", "a.item-link", (function (evt) {
			evt.preventDefault();
			var thisUrl = $(this).attr('href');
			$.pjax({
					url: thisUrl,
					container: '.pjax',
					fragment: '.pjax'
			});
			setTimeout(function() {
				$.pjax({
					url: thisUrl,
					container: '.box-mnu',
					fragment: '.box-mnu'
				});
			}, 1000);
	}));
  • Вопрос задан
  • 333 просмотра
Решения вопроса 1
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Вам нужно загружать .box-mnu после .pjax? Тогда

$(document).pjax('a.item-click', '.pjax', {fragment: '.pjax'});
$('.pjax').on('pjax:success', function () {
        $.pjax({
          url: thisUrl,
          container: '.box-mnu',
          fragment: '.box-mnu'
        });
})


UPD Если хочется грузить одновременно, то имеет смысл попробовать подписаться на другие события, например pjax:beforeSend
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
убрать таймаут пробовали?
Ответ написан
@IceJOKER
Web/Android developer
Убираете setTimeout для решения вашей проблемы, но зачем два запроса отправлять, когда можно одним запросом вытянуть контейнер общий и оттуда уже выдернуть два блока и обновить их?
Все равно вы получаете полную страницу(если конечно не обращаетесь к кусочкам отдельно), так зачем два раза запрашивать одно и то же, когда можно один раз запросить и выдернуть оттуда то, что вам нужно и заменить
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы