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