.ready не подтверждает содержимое AJAX

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

Я загружаю содержимое, в основном изображения, с помощью этого вызова ajax и хотел бы отключить div только тогда, когда все изображения будут полностью загружены. По этой причине я подумал, что мне следует использовать .ready, чтобы весь контент был загружен до того, как я использую jquery для его затухания, но по какой-то причине изображения загружаются не полностью, когда div затухает, что создает впечатление, что он не ожидает загрузки всего.

Я в основном хочу создать предварительную загрузку для этого содержимого AJAX

 function getPage() {
    var data = 'page='   encodeURIComponent(document.location.hash);

    $.ajax({
        url: "loader.php",  
        type: "GET",        
        data: data,     
        cache: true,
        success: function (html) {  


            $('#content').html(html);
            $("#slider").easySlider();  

            $(this).ready(function() {

                 $('#body').fadeIn('slow');
                 $('#loader').fadeOut('slow');

             });




        }       
    });
  

Заранее благодарю вас за помощь. Я все еще новичок.

пример:

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

1. В вашем примере кажется, что поведение соответствует задуманному. Не могли бы вы, пожалуйста, предоставить дополнительные сведения?

2. Проблема в том, что пользователь сможет видеть изображения, загружаемые после выбора раздела. Я хочу, чтобы изображения уже были загружены до того, как div исчезнет. Хотя, возможно, это неправильный способ сделать это. Надеюсь, это прояснит ситуацию.

Ответ №1:

Редактировать: О, теперь я понимаю, в чем ваша проблема!

Когда запускается функция success(), вы должны добавить .событие загрузки к изображениям внутри #content!

Вы должны сделать что-то вроде этого

 function getPage() {
    var data = 'page='   encodeURIComponent(document.location.hash);
    $('#loader').fadeIn('slow');
    $.ajax({
        url: "loader.php",  
        type: "GET",        
        data: data,     
        cache: true,
        success: function (html) {  

            $('#content').html(html);
            $("#slider").easySlider();  
            $('#content img').load(function(){
                 $('#body').fadeIn('slow');
                 $('#loader').fadeOut('slow');
            });
        }       
    });
}
  

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

1. Попробуйте новое решение, пожалуйста.

2. Еще раз спасибо за ответ. Возможно, это совсем другой вопрос, но я ссылаюсь на динамический div, который вызывается с помощью ajax, что не позволяет мне напрямую ссылаться на изображения. Изображения в каждом случае находятся внутри div #slider. Я попробовал следующую функцию загрузки…. $(‘#slider’).load(функция(){… и т.д. И это никогда не попадает внутрь функции. Еще раз спасибо за помощь. Я не уверен, что это еще больше запутывает вещи или упрощает их.

3. Я полагаю, что при загрузке слайдера отображается только 1, поэтому, возможно, вам следует попробовать $ («#slider img:first»).load(функция(){})

4. Проблема в том, что в каждом случае будет передаваться другое первое изображение. Итак, это выглядит так … и будет примерно 10 случаев… Еще раз спасибо, что поддерживаете меня.

5. Нет проблем, этот код работает в любом случае. Попробуйте и опубликуйте демо.