2013-07-27 4 views
4

Я заметил, что Firefox не кэширует запросы GET автоматически. После кода я использую:Кэширование Ответ GET в Javascript Vanilla

var ajax = new XMLHttpRequest(); 
ajax.open("GET","page.php?val=" + val,true); 
ajax.send(); 

С JQuery можно дать cache: true;, как можно сохранить в кэше с ванильным Javascript (на стороне клиента)? Можно также решить, как долго? Можете ли вы привести мне пример кода? Заранее спасибо!

+1

'cache: true', не гарантирует * файл будет кэшироваться. Вам необходимо исправить правильные заголовки, связанные с кешем, с вашего сервера ('Cache-Control',' Last-Modified' и т. Д.), * Затем * и FireFox, и jQuery могут кэшировать файл. См. Http://www.mnot.net/cache_docs/ – Matt

+0

Internet Explorer автоматически сохраняет ответы GET. Впервые я могу сказать, что победитель Internet Explorer: D – user2626246

ответ

1

Веб-кэширование в основном контролируется заголовками, отправленными с сервера (Истекает: и т. Д.). Браузеры иногда «обманывают» и на самом деле не кэшируют, даже если заголовки позволят им ... вероятно, потому, что пользователь использовал свой пользовательский интерфейс, чтобы отключить кеширование, например, установив размер кеша в ноль. Но браузеры, которые «обманывают» другое направление, в любом случае кэшируют, даже если заголовки этого не допускают, являются (по уважительной причине) крайне необычными.

Если для вас не выполняется кеширование, это функция файла и сервера (или, возможно, настройка браузера), а не любого типа браузера или версии. (Чтобы сказать то же самое по-другому, ваш Firefox будет кэшировать просто отлично, если сервер отправил необходимые заголовки.) Заголовки управляются различными способами разными серверами и разными провайдерами. Для сервера Apache, nitty-gritty может находиться в файле .htaccess, предварительно написанные шаблоны которого часто доступны.

В первом приближении, с HTML4, вы просто не можете контролировать кеширование веб-страниц со стороны клиента, независимо от того, какой инструмент вы используете, и независимо от того, что делает ваша программа. Общее исключение обеспечивается новым «кэшем онлайн-приложений» или «appcache» в HTML5 ... но с другими ограничениями, например, такими как «один на сайт» и «то же происхождение».

1

Вы можете кэшировать ответы, используя простой хэш, что-то вроде:

var cache = {}; 
function getData(variable) { 
    if (cache[variable]) { 
     return cache[variable]; 
    } 

    // previous ajax code to get the data... 
    // in the response handler, do: 
    cache[variable] = data; 
} 

Это наивная реализация механизма кэширования: работает только в течение времени жизни страницы (то есть, пока страница не обновляется или навигация от), не имеет никакого механизма истечения, и другие недостатки, я уверен. Например, вы можете использовать localStorage, чтобы обойти проблему обновления.

Но эй, мне не платят, чтобы написать это :).

Смежные вопросы