На 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".