Кеширование результатов AJAX в IE ?

stark555

Guest
Кеширование результатов AJAX в IE ?

Привет всем!

Я в своих работах начал использовать технологию AJAX и у меня сразу же возник вопрос. Вначале я не обращал на это внимание но теперь назрела необходимость решить этот вопрос. Суть следующая: Когда я с помощью AJAX получаю данные и потом их отображаю на странице то в Mozill'е и FireFox'е при повторном затребований этих данных они тянуться, то есть все нормально. Но то же самое действие в IE данные получаються, но при последующем запросе он IE берет их из кеш. Вот меня и интересует как отключить кеширование результов AJAX в IE? Так как в некоторых случаях мне такое действие не нужно. Пожалуйста, кто знает ответьте?
 

MD

Guest
в свое время боролись с помощью +Math.random к урл запроса.
может можно и покрасивей, но на тот момент нужно было быстро и это устроило.
 

MiRacLe

просто Чудо
1. если данные "подкачиваются" GET-ом (а оно видимо так и есть) , то добавляй к урлу случайное число. ("клиентское" решение)

2. можно решить вопрос на стороне сервера(выставлением "правильных" заголовков Expires и Last-Modified.

3. Можно "запрашивать" данные POST-ом, запросы не будут кешироваться.
 

he][es

Новичок
можно решить вопрос на стороне сервера(выставлением "правильных" заголовков Expires и Last-Modified.
IMHO самое правильное решение
PHP:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
 

MiRacLe

просто Чудо
так-то оно "правильное", но squid с aggresive cache плевать хотел на no-cache,про ISA 2000 я вообще "умолчу", поэтому и придумали Math.random() или Date() дописывать.... - пользователей за проксями тоже много....
 

Rifle

Новичок
Автор оригинала: he][es
IMHO самое правильное решение
PHP:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
Просто огромнейшее спасибо!!!
Эти строки меня спасли :)
 

Delph

Новичок
Не пойму почему не получается. У меня 2 файла.
ilya_test1.php:

PHP:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
print_r($_GET);
ilya_test2.php:

<script type="text/javascript">
if (window.XMLHttpRequest) { // Mozilla, Safari, etc.
request = new XMLHttpRequest();
if (request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {

}
}
}
var url='ilya_test.php?sort=mmsstatus'+Math.random();
request.onreadystatechange = dataReceived;
request.open('GET', url, true);
request.send(null);

function dataReceived() {
if((request.readyState == 4) && (request.status == 200)) {
document.write(request.responseText);
}
}


</script>

В IE упорно кэширует. То есть результат всегда наподобие Array ( [sort] => mmsstatus0.5752911995267828 ) . FireFox вообще непонятно что делает. Вначале загружает нормально, но внизу показывает что загрузка продолжается. После нажатия кнопки "Обновить" вообще зависает и отказывается что либо выдавать

В чем ошибка?
 
Сверху