Я получаю некоторые данные json с помощью ajax, когда DOM страницы загружается с использованием jQuery, например:
$(document).ready(function(){
getData();
});
... где getData () - простой ajax-вызов jQuery, что-то вроде этого:
function getData(){
$.ajax({cache: true, dataType: 'json', url: '/foo/bar'});
}
Заголовок Expires для этого запроса установлен на какое-то время в будущем, поэтому при следующей загрузке страницы при вызове ajax следует использовать кэшированные данные. Firefox 3 этого не делает.
Но , если я вместо этого запрашиваю такие данные:
$(document).ready(function(){
setTimeout("getData()", 1);
});
Firefox соответствует заголовку Expires и использует кеш. Есть идеи, почему это будет?
На этой странице упоминается, что браузеры могут обрабатывать вызовы ajax, которые происходят, когда страница загружается иначе, чем вызовы ajax, возникающие в ответ на событие пользовательского интерфейса.
Редактировать : Я забыл включить заголовки http в мой оригинальный пост. Я думаю, что заголовки в порядке, потому что кэширование работает до тех пор, пока запрос не выполняется при вызове ajax при загрузке страницы. Если я захожу на URL, который использует вызов ajax в строке URL моего браузера, кэширование работает, и, как я объяснил выше, кэширование работает, если я добавляю небольшую задержку к вызову ajax.
Заголовки запроса
- Host 10.0.45.64:5004
- User-Agent Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.9.2.9) Gecko / 20100824 Firefox / 3.6.9
- Принять приложение / JSON, текст / Javascript, /
- Accept-Language en-us, en; q = 0,5
- Accept-Encoding gzip, deflate
- Accept-Charset ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
- Keep-Alive 115
- поддержание связи
- X-Requested-With XMLHttpRequest
- Cookie
Заголовки ответа
Я установил заголовок Expires на 1 неделю в будущем, чтобы пользователям приходилось обновлять только один раз в неделю.
- Дата Ср, 04 мая 2011 15:32:04 GMT
- Последнее изменение Ср, 04 мая 2011 15:32:03 GMT
- Истекает Ср, 11 мая 2011 15:32:03 GMT
- Тип содержимого text / javascript
- Cache-Control Public
- Соединение закрыто