Отключить AJAX-кеширование - PullRequest
10 голосов
/ 02 июня 2011

Я сейчас немного рассол. Я создаю веб-страницу, которая будет получать данные из CGI-сервера. У меня нет контроля ни над CGI-сервером, ни над сервером (поэтому нет ни mod_headers, ни mod_expires). Кроме того, из-за параметров в сценарии я не могу добавить уникальное значение (например, '& 089u0af0d98) к каждому запросу. Запросы AJAX с использованием объекта XmlHttpRequest. Я попытался установить заголовки запросов «If-Modified-Since» и «Cache-Control» безуспешно. У кого-нибудь есть какие-либо идеи относительно того, как я могу предотвратить кеширование ответа AJAX браузером?

Ответы [ 5 ]

13 голосов
/ 02 июня 2011

Вы можете отправлять случайные параметры с помощью POST, а при необходимости отправлять важные переменные с помощью GET.

Если у вас проблемы с IE, я знаю, что отправка чего-либо с помощью POST останавливает кэширование ответов сервера

11 голосов
/ 02 июня 2011

Я использую эту функцию javascript (которая, в свою очередь, использует функцию jquery.ajax), кеш: false сделает свое дело.Это прекрасно работает для меня, может быть, вы можете попробовать это

    function ajax_call(urlString)
    {
        ret_val="";
        $.ajax
        (
            {
                type: "GET",
                url: urlString,
                async:false,
                cache:false,
                dataType: 'html',
                success: function(msg)
                {
                    ret_val=msg;
                },
                error:function (xhr, textStatus, thrownError)
                {
                    ret_val=xhr.readyState;
                    alert("status=" +xhr.status);
                }
            }
        );
        return ret_val;
    } 
7 голосов
/ 27 января 2015

Я использовал '$ .ajaxSetup ({cache: false});' где-то в моей базовой html-странице (default.aspx) в нечастой веб-системе, и она работала нормально. Больше нет проблем с кэшированием боли в шее.

4 голосов
/ 04 октября 2011

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

Я добавляю элемент формы примерно так:

<input type="hidden" name="ie_sucks" id="ie_sucks", value="1" />

Затем в функции отправки формы через AJAX я установил этот скрытый ввод для текущей метки времени примерно так:

$('#ie_sucks').val(new Date().getTime());

Приведенный выше код использует JQuery, поэтому в чистом JS это будет что-то вроде:

document.getElementById('ie_sucks').value = new Date().getTime();

Это не очень хорошее решение, но оно работает.

1 голос
/ 02 июня 2011

Я знаю, что в вызове jQuery .ajax() есть параметр с именем 'cache', который, если задано значение false, заставит запрашиваемые страницы не кэшироваться браузером .Вероятно, стоит проверить источник jQuery , чтобы увидеть, как они это делают.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...