Предотвращение кеширования кешированием запросов AJAX
Я установил приложение, и он отлично работает на Opera и Firefox, но в Google Chrome он кэширует запрос AJAX и выдаст устаревшие данные!
http://gapps.qk.com.au - это приложение. При запуске в Chrome он даже не отправляет запросы AJAX, но при попытке в другом браузере он всегда выполняет запрос AJAX и возвращает данные.
Есть ли какой-либо метод (Apache/PHP/HTML/JS), чтобы остановить выполнение этого поведения Chrome?
Вызов AJAX:
function sendAjax(action,domain,idelement) {
//Create the variables
var xmlhttp,
tmp,
params = "action=" + action
+ "&domain=" + encodeURIComponent(domain)
xmlhttp = new XMLHttpRequest();
//Check to see if AJAX request has been sent
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
$('#'+idelement).html(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "ajax.php?"+params, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//console.log(params);
xmlhttp.send(params);
}
sendAjax('gapps','example.com','gapps');
Ответы
Ответ 1
Кэш браузера ведет себя по-разному при разных настройках. Вы не должны зависеть от пользовательских настроек или пользовательского браузера. Возможно, браузер также игнорирует заголовки.
Существует два способа предотвращения кеширования.
- > Измените запрос AJAX на POST. Браузеры не кэшируют запросы POST.
- > Лучший способ и хороший способ: добавить дополнительный параметр к вашему запросу либо с текущей меткой времени, либо с любым другим уникальным номером.
params = "action=" + action
+ "&domain=" + encodeURIComponent(domain)
+ "&preventCache="+new Date();
Ответ 2
Другой альтернативой решению Javascript является использование пользовательских заголовков:
В PHP это будет выглядеть так:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");//Dont cache
header("Pragma: no-cache");//Dont cache
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");//Make sure it expired in the past (this can be overkill)
?>