Я хотел бы включить кеширование ответа ajax в javascript / браузере.
По умолчанию запросы отправляются всегда, но браузер может выдавать результаты из своего кеша. Чтобы запретить использование кешированных результатов, установите для кеширования значение false. Чтобы запрос сообщал об ошибке, если актив не был изменен с момента последнего запроса, установите ifModified в значение true.
Однако ни один из них не касается принудительного кэширования.
Мотивация:
я хочу поместить $.ajax({...})
вызовы в свои функции инициализации, некоторые из которых запрашивают один и тот же URL-адрес. Иногда мне нужно вызвать одну из этих функций инициализации, иногда я вызываю несколько.
Итак, я хочу минимизировать запросы к серверу, если этот конкретный URL-адрес уже загружен.
Я мог бы использовать собственное решение (с некоторыми трудностями!), Но я хотел бы знать, есть ли стандартный способ сделать это.
Ответы:
cache:true
работает только с запросами GET и HEAD.Вы можете использовать свое собственное решение, как вы сказали, примерно так:
Рабочая скрипка здесь
РЕДАКТИРОВАТЬ: поскольку этот пост становится популярным, вот еще лучший ответ для тех, кто хочет управлять кешем тайм-аута, и вам также не нужно беспокоиться обо всем беспорядке в $ .ajax (), поскольку я использую $ .ajaxPrefilter () . Теперь
{cache: true}
для правильной обработки кеша достаточно просто настройки :И скрипка здесь ОСТОРОЖНА, не работает с $ .Deferred
Вот рабочая, но некорректная реализация, работающая с отложенным:
Fiddle HERE Некоторые проблемы, наш идентификатор кеша зависит от представления объекта JSON json2 lib.
Используйте представление консоли (F12) или FireBug для просмотра некоторых журналов, созданных кешем.
источник
localCache.set
функции? Почему не простоdoSomehing(jqXHR)
после установки кеша?doSomething(localCache.set(url,jqXHR));
но это просто личные предпочтенияlocalCache.data[url] = { _: new Date().getTime(), data: _.cloneDeep(cachedData, true) }; _.cloneDeep(localCache.data[url].data, true)
Я искал кеширование для своего хранилища приложений для телефонных разговоров, и я нашел ответ @TecHunter, который великолепен, но с использованием
localCache
.Я обнаружил и узнал, что localStorage - еще одна альтернатива кешированию данных, возвращаемых вызовом ajax. Итак, я создал одно демо,
localStorage
которое поможет другим, кто может захотеть использовать егоlocalStorage
вместоlocalCache
кеширования.Ajax Call:
Чтобы сохранить данные в localStorage:
Если вы хотите удалить localStorage, используйте следующую инструкцию везде, где хотите:
Надеюсь, это поможет другим!
источник
localStorage.removeItem("Info");
насчет"info"
этого URL?info
- это объект для хранения данных в localStorage.responseJSON is not defined
. Как это исправить? (мой тип данных html)Все современные браузеры предоставляют API хранилища. Вы можете использовать их (localStorage или sessionStorage) для сохранения ваших данных.
Все, что вам нужно сделать, это после получения ответа сохранить его в хранилище браузера. Затем в следующий раз, когда вы найдете тот же вызов, поищите, сохранен ли уже ответ. Если да, верните ответ оттуда; если нет, сделайте новый звонок.
Плагин Smartjax также делает аналогичные вещи; но поскольку ваше требование - просто сохранить ответ на вызов, вы можете написать свой код внутри своей функции успеха jQuery ajax, чтобы сохранить ответ. И перед звонком просто проверьте, сохранен ли уже ответ.
источник
Если я понял ваш вопрос, вот решение:
и для конкретных звонков
Если вы хотите наоборот (кеш для определенных вызовов), вы можете установить false в начале и true для определенных вызовов.
источник
Старый вопрос, но мое решение немного другое.
Я писал одностраничное веб-приложение, которое постоянно выполняло вызовы ajax, инициированные пользователем, и, чтобы сделать его еще более сложным, требовались библиотеки, которые использовали методы, отличные от jquery (например, dojo, native xhr и т. Д.). Я написал плагин для одной из моих собственных библиотек, чтобы максимально эффективно кэшировать запросы ajax таким образом, чтобы он работал во всех основных браузерах, независимо от того, какие библиотеки использовались для вызова ajax.
В решении используется jSQL (написанный мной - постоянная реализация SQL на стороне клиента, написанная на javascript, который использует indexeddb и другие методы хранения dom) и поставляется в комплекте с другой библиотекой под названием XHRCreep (написанной мной), которая является полной переписью собственный объект XHR.
Чтобы реализовать все, что вам нужно сделать, это включить плагин на свою страницу, которая находится здесь .
Есть два варианта:
Установите максимальный возраст в минутах. любые кешированные ответы, которые старше этого, запрашиваются повторно. По умолчанию 1 час.
Если установлено значение true, фиктивные вызовы XHR будут отображаться в консоли для отладки.
Вы можете очистить кеш на любой странице с помощью
источник
введите описание ссылки здесь
источник