Отключить кеширование AJAX

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

Ответ 1

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

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

Ответ 2

Я использую эту функцию 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;
    } 

Ответ 3

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

Ответ 4

Я столкнулся с этим сегодня и обнаружил, что если вы хотите продолжать использовать 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();

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

Ответ 5

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

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