Это действительно сложная проблема, поэтому я могу извиниться, если убью ее.
Недавно я запустил сайт, который был тщательно протестирован на моем локальном веб-сервере во всех моих браузерах.платформы, включая IE8 (режим стандартов IE8, XHTML Strict).Я не столкнулся с какими-либо проблемами, пока сайт не начал работать на выделенном веб-сервере.
Сайт использует jQuery.get()
в событии change
для элементов input
формы, в которую вводится ответв общую <div id="results"></div>
.
Несмотря на проблемы с кэшированием, о которых я читал в IE и XMLHTTPRequest, моя проблема, кажется, имеет место ПОСЛЕ того, как мой обратный вызов ajax начинает выполняться.Мой обратный вызов (предоставляется через .get()
/ .load()
- я пробовал оба) получает фрагмент HTML, возвращенный моим сервером.Тестирование возвращенного содержимого в любом браузере показывает, что именно я ожидаю от содержимого.
Однако, как только я помещаю фрагмент HTML в дерево DOM в #results
, IE фактически обрезает первые 7 или8 открывающих тегов от моей разметки (вместе с дочерними элементами большинства из этих тегов).Это злобно странно.Я исправил это в другой области сайта, установив HTML-контент с помощью jQuery('#results')[0].innerHTML = content
, но на этот раз без кубиков.
Пример ответа:
<div>
<a href="#">some link</a>
<span>stuff, blah blah</span>
<a href="#">another link</a>
<ul>
<li id="item-2342">
<img src="#" />
<div class="info">
<h6> ..title.. </h6>
<a href="#">View</a>
<span rel="stats"> ..statistics.. </span>
</div>
</li>
<!-- ... and so on in a loop over items to create more <li> items ... -->
</ul>
</div>
Буквально ВСЁ через открывающий тегиз этого <span rel="stats">
усечено.В результате IE отображает мой возвращенный контент AJAX, как если бы он начинался с текстового узла: ..statistics.. </span>
.(Я попытался удалить rel="stats"
по предложению комментария ниже, вместо этого изменив его на класс CSS, но результат тот же.)
Если я запрашиваю свой URL AJAX напрямую через поле URL браузера,возвращенное содержимое идеально.
Если я использую alert()
для отображения возвращенного содержимого AJAX, оно идеально.
Если я назначаю свое содержимое AJAX с помощью .html()
или .innerHTML
,это немедленно усекается.
Оооо .... WTF?IE (дерьмовый) отладчик не отображает ошибок скрипта или чего-либо подобного.Кто-нибудь когда-нибудь сталкивался с такой проблемой раньше?Опять же, я подчеркиваю тот факт, что на моем сервере разработки (127.0.0.1) IE не имеет проблем, и он, похоже, использует тот же «режим» (стандарты IE8) и все.
РЕДАКТИРОВАТЬ: ЗдесьJavascript поддерживает поиск AJAX:
jQuery('.ajax-panel').live('load', function(event, request_string){
var panel = jQuery(this).stop(true).fadeTo(100, 0.2).addClass('loading');
var form = jQuery(panel.attr('rel'));
jQuery.get(form.attr('action'), request_string ? request_string : form.serialize(), function(response){
// WTF?
// panel[0].innerHTML = response;
panel.empty().append(response);
// Carry on.
panel.removeClass('loading').stop(true).fadeTo(100, 1);
});
});