Очистить кеш IE при использовании AJAX без строки запроса к кешу, но с использованием заголовка ответа http - PullRequest
2 голосов
/ 24 января 2012

У меня классическая проблема IE-caches-all-in-Ajax. У меня есть немного данных, которые обновляются каждую минуту.

Изучив форумы, решения сводятся к этим вариантам (http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call):

  • добавить токен для очистки кэша в строку запроса (например,? Time = [timestamp])
  • отправляет заголовок ответа HTTP, который специально запрещает IE кэшировать запрос
  • использовать ajax POST вместо GET

К сожалению, очевидная настройка запроса или «cache: false» не будет работать для меня, поскольку обновленный файл данных размещен в Akamai Netstorage и не может принимать строки запросов. Я тоже не хочу использовать POST.

Что я хочу сделать, так это попробовать отправить заголовок ответа HTTP, который специально запрещает IE кэшировать запрос или, если кто-то еще знает другое решение для очистки кэша ??

Кто-нибудь знает, как это можно сделать? Любая помощь будет высоко ценится.

Вот мой код:

(function ($) {
var timer = 0;
var Browser = {
    Version: function () {
        var version = 999;
        if (navigator.appVersion.indexOf("MSIE") != -1) version = parseFloat(navigator.appVersion.split("MSIE")[1]);
        return version;
    }
}
$.fn.serviceboard = function (options) {
    var settings = { "refresh": 60};

    return this.each(function () {
        if (options) $.extend(settings, options);
        var obj = $(this);
        GetLatesData(obj, settings.refresh);
        if (settings.refresh > 9 && Browser.Version() > 6) {
            timer = setInterval(function () { GetLatestData(obj, settings.refresh) }, settings.refresh * 1000);
        }
    });
};
function GetLatestData(obj, refresh) {
    var _url = "/path/updated-data.htm";
    $.ajax({
        url: _url,
        dataType: "html",
        complete: function () {},
        success: function (data) {  
            obj.empty().append(data);               
            }
        }
    });
}
})(jQuery);

Ответы [ 2 ]

1 голос
/ 04 марта 2016

Это сводило меня с ума.Я испробовал много методов очистки кэша и установки заголовков кэша.Многие из них либо не работали, либо преследовали диких гусей.Единственное решение, которое я нашел и которое протестировало для правильной работы, было настройка:

Header Pragma: no-cache

Я надеюсь, что это спасет других от головной боли IE.

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

Добавьте случайное число в запрос GET, чтобы IE не идентифицировал его как «то же самое» в своем кеше.Это число может быть отметкой времени:

new Date().getTime()

РЕДАКТИРОВАТЬ возможно сделать запрошенный URL:

var _url = "/path/updated-data.htm?" + new Date().getTime()

Это не должно вызывать никаких ошибок, я считаю.

EDIT2 Извините, я просто немного лучше прочитал ваш пост и увидел, что это не вариант для вас.

Вы говорите, что "размещен на Akamai и не может принимать строки запросов", нопочему бы и нет?Я никогда не слышал о странице, которая не будет принимать дополнительные: «? Blabla», даже когда это HTML.

...