@greck10

Как отследить окончание загрузки всех AJAX элементов на странице?

Для обработки события scroll нужно узнать высоту документа: var heightPage=$('body').outerHeight(true);
Но если на странице есть асинхронные элементы AJAX влияющие на высоту, то outerHeight(true) выдает не правильный результат. Понятно, что нужно узнавать высоту после загрузки всех элементов AJAX на странице, но как отследить их загрузку?

Очевидно, что нужно использовать обьект deferred, и видимо с функцией $.when(). Два дня пытаюсь разобраться как использовать этот обьект, ничего не получается.

У меня есть пользовательская функция, которая вызывается несколько раз на странице (по количеству AJAX элементов):

var ajaxchange = function(ser, ths){
                     var ld=$('<div class="loader-wrapper-str"><div class="loader"></div></div>');
                    $.ajax({
                        url:"/include/data.php",
                        type: "GET",
                        data: ser,
                        beforeSend:function(){
                            ths.replaceWith(ld);
                        },
                        success:function(result){
                            ld.replaceWith(result);
                        }
                    });  
                }

                // Вызываю ее для каждого элемента
                $('.js-ajax-data').each(function(){
                    var ths=$(this);
                    ajaxchange({tm: ths.data('id'), ser: ths.data('ser')}, ths); 
                });
                

                // После загрузки нужно узнать высоту. Как?
                var heightPage=$('body').outerHeight(true);


Как к этой функции прикрутить проверку что все элементы загружены? Допишите, пожалуйста, прям в моем коде. Очень нужна помощь!
  • Вопрос задан
  • 1273 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
var requests = [];
var ajaxchange = function (ser, ths) {
	var ld = $('<div class="loader-wrapper-str"><div class="loader"></div></div>');

	return $.ajax({
		url: "/include/data.php",
		type: "GET",
		data: ser,
		beforeSend: function () {
			ths.replaceWith(ld);
		},
		success: function (result) {
			ld.replaceWith(result);
		}
	});
};

$('.js-ajax-data').each(function () {
	var ths = $(this);
	requests.push(ajaxchange({tm: ths.data('id'), ser: ths.data('ser')}, ths));
});

$.when.apply($, requests).then(function () {
	var heightPage = $('body').outerHeight(true);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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