На jQuery.get () не работает в IE8/9. Не загрузки кэшированных страниц 304 не изменено

воспламенитель кода версии 2.0.3' С jQuery 1.7 Плагин истории Jquery

Привет, ребята,

у меня есть приложение CodeIgniter, которое я построил в стиле ajax. У меня есть функция следующим образом:

$(document).on('click','.ajax_link',function(e){
    //Stop the normal href action
    e.preventDefault();

    //Grab the destination URL
    var new_url = $(this).attr('href')

    //Grab the content via ajax and pass it to the history change function
    $.get(base_url+new_url,function(data){
        History.pushState({
            content:data.content,
            url:data.url
        }, data.title, data.url);
        //Refresh some site variables
        refresh();
    },'json');
});

все, что он делает, он захватывает клики по элементам привязки с классом ajax_link и отправляет ответ функции, которая обрабатывает размещение этих данных ответа на странице.

это работает в Chrome и FF. Я нажимаю ссылку, jQuery делает get запрос, я возвращаю объект JSON и свою историю.функция pushState () вводит некоторые данные json на мою страницу.

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

  • делает ajax GET
  • получает ответ 304 (не изменен)
  • не вызывает jQuery.get() функции обратного вызова, и, следовательно, перестает мертвый.

если я очищу кэш, он снова работает. Поэтому я предполагаю, что IE выполняет запрос get, но затем он видит, что он уже запросил тот же самый файл в прошлом... и таким образом полностью останавливает процесс.

кто-нибудь знает решение этого? Я искал упоминания об ошибках 304 и ошибках с ajax и кэшированием в IE, но пока не нашел проблемы, идентичной моей.

любой поможет оценили

(протестировано на виртуальной машине Windows IE8 и режиме IE 8 в Internet Explorer 9)

решить

просто нужно добавить следующий код в Мои документы.готовые функции и проблема исчезла.

$.ajaxSetup ({cache: false});

2 ответов


измените эту строку:

var new_url = $(this).attr('href')

для этого:

var new_url = $(this).attr('href') + '?' + Math.random();

Это называется "CacheBuster" и эффективно создает url-адрес, подобный:

"website.com/page.html?1241233"

это случайное число будет отличаться для каждого щелчка ".ajax_link", поэтому IE подумает о новой странице и получит ее правильно.


У нас была проблема с IE (и Opera) не нравится "application/json", где мы должны отобразить ответ как "text/plain".