jquery .load () не вставляет данные в ie8 и ниже - PullRequest
4 голосов
/ 19 января 2012

Я искал решение весь день, но все еще вижу эту ошибку.

Это настройка Expression Engine для нашего клиента, и мы хотим реализовать ajax-навигацию. Для этого мы используем функцию $ .load () по умолчанию, и она отлично работает в ie9, FF, Safari, Chrome, Opera ... но не работает в ie8 и ниже.

Я протестировал функцию обратного вызова, когда вызывается одна ИС, данные отправляются, я могу прочитать их в консоли при регистрации. Но по какой-то странной причине данные не вставляются.

Вот код:

load_page: function(url, func){
    $('#content').load(url+' #content>div', function(data, textStatus, jqXHR){
        console.log('page loaded!');
    });
}   

В функции обратного вызова была целая куча лишнего кода, но я очищал весь javascript / css. В поисках ошибок, но ничего не найдено.

На основании комментариев я решил добавить URL и загрузить:

Еще один кусочек головоломки: В JavaScript есть что-то странное. Даже API-интерфейс Google Maps не работает должным образом, это первый раз, когда это случилось со мной при использовании API-интерфейса Google Maps.

РЕДАКТИРОВАТЬ: ответил

Я наконец-то нашел ответ на этот вопрос благодаря @epascarello. Это на самом деле вина данных, которые я пытался импортировать. Поскольку IE8 и ниже не понимают HTML5, они попытаются импортировать элементы в dom, но при предупреждении о данных я увидел следующее: [объект HTMLUnknownElement], [объект HTMLUnknownElement], [объект HTMLUnknownElement], ...

Когда я изменил разметку данных, чтобы использовать старые добрые div вместо элементов article, все работало нормально!

Ответы [ 5 ]

3 голосов
/ 27 ноября 2012

У меня была та же проблема, и я заметил, что если URL возвращает недопустимый HTML (например, дополнительный конечный тег), он может остановить его от загрузки или поиска правильного элемента.

В моем примере все, что мне нужно былоdo исправил HTML-код из URL, после чего он работал правильно.

2 голосов
/ 25 июня 2013

ajax-запросы кэшируются в IE8, поэтому немного волшебства

$. AjaxSettings.cache = false;

перед использованием функции загрузки

http://zacster.blogspot.in/2008/10/jquery-ie7-load-url-problem.html

http://api.jquery.com/jQuery.ajax/

кеш (по умолчанию: true, false для dataType 'script' и 'jsonp')
Тип: Boolean
Если задано значение false, принудительно будет запрошеностраницы не должны быть кэшированы браузером.Примечание. Установка для кэша значения false будет корректно работать только с запросами HEAD и GET.Это работает путем добавления "_ = {timestamp}" к параметрам GET.Этот параметр не нужен для других типов запросов, кроме IE8, когда выполняется POST для URL, который уже был запрошен GET.

1 голос
/ 19 января 2012

Единственное, что я вижу неправильно в этом коде, это то, что вам не хватает закрывающей скобки

load_page: function(url, func){
     $('#content').load(url+' #content>div', function(data, textStatus, jqXHR){
           console.log('page loaded!');
     } // <-- this one
}); 
0 голосов
/ 19 января 2012

$.load() работает в IE8.Я предполагаю, что у вас есть предыдущая ошибка JS, вызванная только в IE8-, которая мешает ее правильной работе или ее вызову.

0 голосов
/ 19 января 2012

Проблема в том, что некоторые функции поддерживаются в одной, а не в других. Например, одна из моих личных ненавистей - то, что innertext поддерживается только в ie7,8, но не в fox или chrome. Вот диаграмма совместимости, если вы заинтересованы http://www.quirksmode.org/dom/w3c_html.html.

Итог: если вы не планируете изменить плагин самостоятельно, и вы уже попробовали модернизатор, и это не помогло, вам не придется использовать другой метод загрузки данных. Мое предложение состоит в том, чтобы использовать .html, вы не можете ошибиться с этим, или добавить и вручную сформировать HTML в js. Проще всегда лучшее решение.

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