Знать, когда образы загружаются в ответ AJAX - PullRequest
11 голосов
/ 01 ноября 2009

У меня есть функция jQuery ajax, которая загружает некоторый контент в div, часть контента - изображения. Я хотел бы сказать, пока те изображения, которые были загружены в моем ajax, не закончили загрузку, а затем не запустили функцию, такую ​​как показ содержимого. Таким образом, у меня не будет контента, загруженного в div, и начнут загружаться изображения. Я хочу, чтобы они были загружены, затем поместите содержимое или show() содержимое в div.

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

Ответы [ 3 ]

12 голосов
/ 01 ноября 2009

Вам необходимо добавить обработчик загрузки в обратный вызов AJAX, чтобы он применялся к изображениям, загружаемым через вызов AJAX. Вам также может потребоваться установить таймер для отображения содержимого через некоторый интервал, если изображения загружаются до применения обработчика загрузки.

$.ajax({
     ...
     success: function(data) {
          var imageCount = $(data).filter('img').length;
          var imagesLoaded = 0;
          $(data).hide()
                 .appendTo('#someDiv')
                 .filter('img')
                 .load( function() {
                     ++imagesLoaded;
                     if (imagesLoaded >= imageCount) {
                        $('#someDiv').children().show();
                     }
                  });
          setTimeout( function() { $('#someDiv').children().show() }, 5000 );
      }
});
10 голосов
/ 08 июня 2010

Это обновленная версия кода tvanfosson предоставляется.

Вы должны убедиться, что переменная imageCount считает список узлов, а не строку, как это было в исходном коде, как я могу вывести:

$.ajax({
    url      : 'somePage.html',  
    dataType : "html",
    success  : function(data) {

        $(data).hide().appendTo('#someDiv');

        var imagesCount = $('#someDiv').find('img').length;
        var imagesLoaded = 0;

        $('#someDiv').find('img').load( function() {
            ++imagesLoaded;
            if (imagesLoaded >= imagesCount) {
                $('#someDiv').children().show();
            }
        });

        var timeout = setTimeout(function() {
            $('#someDiv').children().show();
        }, 5000);
    }                     
});
0 голосов
/ 01 ноября 2009

$("img").load() не будет работать, потому что изображения загружаются динамически; эта команда будет применяться только к изображениям на странице в данный момент.

используйте $("img").live("load") для отслеживания загрузки изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...