Firefox 3 не использует кеш при вызове ajax во время загрузки страницы - PullRequest
4 голосов
/ 02 мая 2011

Я получаю некоторые данные 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
  • Соединение закрыто

1 Ответ

0 голосов
/ 03 мая 2011

Определите обработчик ошибок в вызове $ .ajax () и проверьте заголовки ответа (используя jqXHR.getAllResponseHeaders (), где jqXHR - это объект jQuery Ajax, код состояния и responseText.length. Вы можете обнаружить, что запросуспешно, но jQuery рассматривает их как неудачные. Недавно у меня была похожая проблема с кэшированными файлами и $ .ajax (), и оказывается, что иногда, когда файлы загружаются, когда браузер отключен или из локального файла, возвращаютсякод состояния 0. Поскольку статус не попадает в диапазон кодов успеха (200-300), jQuery считает запрос неудачным. См. this , чтобы узнать, что я сделал, чтобы исправить эту проблему.В основном, в вашем обработчике ошибок вы можете проверить responseText.length. Если он не пустой, считайте запрос успешным и проанализируйте JSON с помощью JSON.parse (). НО !!! вы должны убедиться, что на вашем сервере-сторона, в которой недействительные запросы пусты.

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