2011-12-23 2 views
3

У меня есть страница, которая захватывает содержимое из файла XML через вызов JQuery AJAX.Internet Explorer не обновляет содержимое AJAX при обновлении?

Проблема заключается в том, что он обновит содержимое из XML-файла при обновлении для каждого браузера, кроме IE.

Я попытался решить эту проблему с мета-теги

<meta http-equiv="expires" content="-1"/> 
<meta http-equiv="cache-control" content="no-cache,must-revalidate" /> 
<meta http-equiv="pragma" content="no-cache"/> 

Это небольшая часть соответствующего JavaScript

$(document).ready(function(){ 
$.ajax({type: "GET",url: "file1.xml",dataType: "xml", success: parseXml }); 
} 

function parseXml(xml){ 
document.getElementById(eventMonthName).innerHTML=firstxmlvari.getElementsByTagName('month')[0].childNodes[0].nodeValue; 
} 

Любые предложения будут очень признателен!

+0

Я не знаю, что бэкэнд т используемой вами, но вы должны попробовать настроить заголовки HTTP. По моему опыту, более старый IE не очень хорошо реагирует на метатеги. Вот как манипулировать заголовками http в php. http://www.jonasjohn.de/snippets/php/headers.htm –

ответ

3

Да, вероятно, вы столкнетесь с кэшированием агрессивным в IE ... Попробуйте установить заголовки HTTP, но то, что работает для меня, является добавление текущего времени в строке запроса, как это:

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/echo/xml/", 
     data: { 
      _rnd: new Date().getTime() 
     }, 
     dataType: "xml", 
     success: parseXml 
    }); 
}); 

function parseXml(xml) { 
    alert(xml); 
} 

пример в JSFIDDLE: http://jsfiddle.net/WVBDc/, проверьте исходящие HTTP-запросы.

+0

Вау! Спасибо, это то, что я искал! –

0

Спасибо, у меня была аналогичная проблема (только в IE, конечно) с выпадающим списком, который не обновлялся после запроса. Добавление временной метки делало трюк в сочетании с;

$(document).trigger("ready");

в функции успеха, ура!

4

Вы также можете использовать опцию «cache: false», которая будет работать так же, как упоминается Akos Lukacs. Результат одинаков, но вам не нужно создавать свою собственную дату.

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "/echo/xml/", 
     cache: false, 
     dataType: "xml", 
     success: parseXml 
    }); 
}); 
3

Как метод .load Jquery не предлагает удобный способ отключения кэша, добавить параметр временных меток на мой запрос, который просто игнорируется на уровне контроллера:

$('#userDialog').load('/Users/Edit/' + someValue + '?timestamp=' + new Date().getTime(), function() { 
... 
}); 

или :

$('#userDialog').load('/Users/Create', { timestamp: new Date().getTime() }, function() { 
... 
}); 

Это действительно необходимо только для IE и до сих пор в версии 10.

Смежные вопросы