Обратный вызов загрузки jQuery в IE7

#jquery #internet-explorer-7 #callback #load

#jquery #internet-explorer-7 #обратный вызов #загрузка

Вопрос:

У меня проблема с IE7 и обратным вызовом загрузки jQuery. Все браузеры, кроме IE7, запускают обратный вызов моей функции загрузки правильно. Просто не могу найти решение для этого.

 $('#cd_vk_cinemascreen').load('/index.php?id=19 #cd_content', function() {
 $('#cd_vk_cinemascreen #cd_content').attr('class', 'cm_contentWrapper');
 $('#cd_vk_cinemascreen #cd_content').attr('id', 'nothing');
});
  

Спасибо за любую помощь.

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

1. Есть сообщения об ошибках? Ваш вопрос немного расплывчатый.

2. Вы выполняете запрос селектора для одного и того же элемента DOM в двух последовательных операторах. Как возможно, что вы не видите, что это избыточно?

3. К сожалению, сообщений об ошибках нет … 🙁 В чем проблема выбора одного и того же элемента в двух последовательных операторах?

4. @user983992 Это все равно, что пойти в магазин, чтобы купить две пачки сигарет, но делать это таким образом, когда вы идете в магазин, покупаете одну пачку, затем возвращаетесь домой, затем возвращаетесь в магазин и покупаете вторую пачку. Это, конечно, неэффективно, я уверен, что вы понимаете.

5. Хорошо, тогда как мне установить идентификатор и атрибуты класса, выбрав элемент только один раз? .attr().attr() ?

Ответ №1:

Недавно у меня была эта проблема; Я считаю (но не уверен), что это условие гонки.

При использовании jQuery .load с фрагментами документа ( '/index.php?id=19 #cd_content' в вашем случае) весь документ получается с помощью AJAX. Похоже, что в этот момент обратный вызов запускается одновременно с анализом документа, загруженного AJAX, извлекается и анализируется нужный блок селектора, а идентификатор добавляется в ваш собственный документ.

Но к тому времени, когда этот блок будет проанализирован и добавлен в ваш документ, обратный вызов уже запущен. Конечно, этот обратный вызов ничего не дал, потому что во время его запуска выбранный элемент еще не был вставлен.

Мое решение состояло в том, чтобы избежать проблемы: я урезал загружаемый AJAX документ, чтобы мне не нужно было загружать фрагмент, тем самым избегая состояния гонки.

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

1. К сожалению, я не могу обрезать документ, загруженный Ajax. Я думаю, я попытаюсь загрузить содержимое с помощью $.ajax()

Ответ №2:

Вот как я бы это сделал:

 $( cinemascr ).load( '/index.php?id=19 #cd_content', function () {
    $( '#cd_content', cinemascr ).
        addClass( 'cm_contentWrapper' ).
        [0].id = 'nothing';
});
  

где cinemascr кэшируется заранее — я предполагаю, что это статический элемент на странице. В этом случае вы можете кэшировать его при загрузке страницы следующим образом:

 var cinemascr = $( '#cd_vk_cinemascreen' )[0];
  

Возможно, IE7 не нравится формат URL '/index.php?id=19'

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

1. Попробовал RealURL, который выглядит как «/page1 / page2». Не решил проблему. Я попытаюсь загрузить содержимое с помощью $.ajax().