У меня есть простое приложение, которое показывает список многих элементов, где пользователь может отображать детали для каждого элемента, полученного с помощью Ajax.
Однако, если пользователь закрывает деталь и снова открывает, приложение делает еще один Ajax-запрос, чтобы снова получить тот же контент.
Есть ли какое-либо простое решение, как предотвратить это путем кэширования запросов на клиенте, поэтому, когда пользователь снова отображает ту же информацию, содержимое будет загружаться из кеша. Предпочтительно использовать jQuery.
Я думаю, что это можно решить с помощью прокси-объекта, который будет хранить запрос, когда он будет сделан в первый раз, и когда запрос будет сделан снова, прокси просто вернет предыдущий результат, не делая другого запроса Ajax.
Но я ищу какое-то более простое решение, где мне не придется реализовывать все это самому.
Ответ 1 · рейтинг 2 · Konstantin Tarkus
Взгляните на эти плагины jQuery:
- http://plugins.jquery.com/project/cache
- http://plugins.jquery.com/project/Tache
- http://plugins.jquery.com/project/jCache
Пример jQache
// [OPTIONAL] Set the max cached item number, for example 20
$.jCache.maxSize = 20;
// Start playing around with it:
// Put an item into cache:
$.jCache.setItem(theKey, theValue);
// Retrieve an item from cache:
var theValue = $.jCache.getItem(theKey);
// Clear the cache (well, I think most of us don't need this case):
$.jCache.clear();
Ответ 2 · рейтинг 2 · Thinker
IMHO самый простой способ - создать глобальный массив:
var desc_cache=[];
а затем создайте такую функцию:
function getDesc(item){
if(desc_cache[item]) return desc_cache[item] else $.ajax(...);
}
После получения данных ajax сохраните результаты в desc_cache.
Ответ 3 · рейтинг 1 · Andreas B
Еще один плагин кеша jQuery, где вы можете установить срок действия и зависимости для объектов:
http://plugins.jquery.com/project/jCacher
Пример кода jCacher:
$(document).ready(function() {
$.jCacher.add("key", "value");
});
$(document).ready(function() {
var cacheItem = $.jCacher.get("key");
alert(cacheItem.value + " was retrieved from the cache");
});