IE не обновляется после Ajax get / posts - PullRequest
1 голос
/ 13 апреля 2011

У меня небольшая проблема, с которой я не знаю, как справиться.

Я написал несколько постов / запросов jQuery, которые отлично работают в FF, Opera и Chrome.Но при запуске из проводника (любой версии) обновленный контент из запроса не загружается в браузер.Я использовал инструменты разработчика и отлаживал скрипты, а запросы отправлялись с правильными параметрами.Действия даже выполняются, но они не видны, пока я не очистил историю браузера или не открыл или не закрыл браузер.

Это может быть глупым вопросом, но как мне заставить IE распознавать изменения из этихзапросы?

Ответы [ 5 ]

13 голосов
/ 13 апреля 2011

Попробуйте установить параметр cache: false для ваших запросов AJAX, поскольку браузеры могут кэшировать запросы GET:

$.ajax({
    url: '/foo',
    type: 'GET',
    cache: false,
    success: function(result) {
        // TODO: update the DOM with the results
    }
});
2 голосов
/ 28 января 2015

Происходит то, что вы, скорее всего, делаете GET-запрос к веб-службе для вашего AJAX вызова.

Internet Explorer, в своем понимании, будет автоматически кэшировать ответы на запросы GET, в то время как другие браузеры позволят вам решить, хотите ли вы кэшировать результат или нет.Как только IE успешно выполнит запрос GET , он больше не будет даже выполнять этот вызов AJAX , пока не истечет срок действия кэша для этого объекта.Решения:

Использование POST: Один из вариантов - просто использовать запросы POST вместо запросов GET в вашем приложении.Обычно это небольшое изменение для переключения с GET на POST как на стороне клиента, так и на стороне сервера.

Заголовки ответов:

Вы также можете предотвратить кэширование, отправив дополнительные заголовки вместе с вашим ответом.Указав заголовок “Cache-Control” со значением “no-cache,no-store” и вернув его вместе с ответом веб-службы, вы можете указать браузеру не кэшировать результат.

jQuery:

Наконец, если вы используете jQuery, вы можете указать, что не хотите кэшировать ответ от ваших запросов AJAX либо по всем направлениямиспользуя метод $ .ajaxSetup () или для каждого запроса в качестве кэша: false.

1 голос
/ 14 апреля 2011

Попробуйте добавить следующее в заголовок ответа, и IE больше не будет кэшироваться:

response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "must-revalidate");
response.addHeader("Cache-Control", "Post-Check=0");
response.addHeader("Cache-Control", "Pre-Check=0");
response.addHeader("Expires", "Mon, 1 Jan 2006 05:00:00 GMT");//in the past

ПРИМЕЧАНИЕ: код java-кода

0 голосов
/ 04 января 2017
$.ajax({
        type: 'GET',
        cache: false,

это работает при написании cache: false, работает в Internet Explorer с версиями 10 и 11, а также в Firefox и Crome. Спасибо, переполнение стека.

0 голосов
/ 21 мая 2014

В IE, используя ajax, вызовите его кеш создания и сохраните старые значения. Когда вы получите ответ, его положительное значение catch. Таким образом, вы можете сделать кеш ложным.вы можете использовать оба в вашем коде. но первый ответ лучше.

...