Предотвращение кэширования загруженного внешнего файла ajax-jquery в IE - PullRequest
1 голос
/ 25 августа 2009

У меня есть этот скрипт jquery для вызова внешнего файла. Все идет нормально. Скрипт работает нормально, но как всегда IE делает то, что хочет. Внешний файл, который я загружаю с помощью этого скрипта (weather.php), представляет собой файл с данными о погодных условиях в реальном времени. С помощью этого скрипта я могу обновить div внутри моего файла weather.php. И, очевидно, я не хочу, чтобы IE кэшировал данные в этом файле. Я хочу, чтобы когда кто-то нажимал на кнопку «ОБНОВИТЬ», включенная страница была перезагружена с новыми данными в ней. В IE этого не происходит из-за кеша. Как я могу изменить этот скрипт, чтобы он не кэшировал содержимое div, или как я могу сказать своему включенному файлу (weather.php) не кэшировать его самостоятельно?

Это скрипт:

function ajax_request() {
$('#column_weather').html('<img src="../images/home/ajax-loader.gif" width="16" height="11" style="vertical-align:middle;"/><b>&nbsp;&nbsp;Loading...</b>');
$('#column_weather').load("../includes/home/weather.php");

} `

И вот как я называю сценарий:

<a href="#" onclick="ajax_request();return false;">Refresh</a>`

Ответы [ 4 ]

2 голосов
/ 25 августа 2009

Поместите случайную переменную в ваш запрос String

$('#column_weather').load("../includes/home/weather.php?myRand=" + guid());

Я бы заставил случайную переменную вернуть guid

function s4() {
       return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}

function() guid{
       return s4()+s4()+"-"+s4()+"-"+s4()+"-"+s4()+"-"+s4()+s4()+s4();
}
0 голосов
/ 25 августа 2009

Добавление случайного параметра в конец URL-адреса запроса поможет, но попробуйте добавить его в начало weather.php:

<?php 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', FALSE); 
header('Pragma: no-cache'); 
?>
0 голосов
/ 25 августа 2009

Я бы прикрепил текущую дату и время в качестве параметра GET. Internet Explorer (и другие браузеры) считают эту информацию критической для загрузки страницы, так же как любая функция возвращает другое значение с другими параметрами. Хитрость в том, что вам не нужно использовать параметр. :)

$('#column_weather').load("../includes/home/weather.php?t=" + date());
0 голосов
/ 25 августа 2009

Разве вы не можете просто иметь правильные инструкции кеширования внутри этого файла weather.php (чтобы не кэшировать его)

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