Как реализовать кеш для Ajax-запросов - PullRequest
4 голосов
/ 02 апреля 2009

У меня есть простое приложение, которое показывает список многих элементов, в которых пользователь может отображать детали для каждого элемента, полученные Ajax.

Однако, если пользователь закрывает подробности и открывает снова, приложение делает еще один Ajax-запрос, чтобы снова получить тот же контент.

Есть ли какое-то простое решение, как предотвратить это, кэшируя запросы на клиенте, поэтому, когда пользователь снова отображает ту же самую деталь, контент будет загружен из кеша. Предпочтительно использовать jQuery .

Я думаю, что это можно решить с помощью прокси-объекта, который будет хранить запрос при первом его выполнении и при повторном запросе, прокси просто вернет предыдущий результат без повторного запроса Ajax.

Но я ищу более простое решение, в котором мне не придется реализовывать все это самостоятельно.

Ответы [ 4 ]

2 голосов
/ 02 апреля 2009

ИМХО самый простой способ - создать глобальный массив:

var desc_cache=[];

, а затем создайте функцию, подобную этой:

function getDesc(item){
if(desc_cache[item]) return desc_cache[item] else $.ajax(...);
}

После получения данных ajax сохраните результаты в desc_cache.

2 голосов
/ 02 апреля 2009

Взгляните на эти плагины jQuery:

Пример 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();
1 голос
/ 22 марта 2010

Другой плагин кеша 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");

});
0 голосов
/ 19 августа 2011

Вы можете создать один или два класса, чтобы инкапсулировать тот факт, что вы кэшируете; затем вы можете использовать либо AJAX, либо кеш взаимозаменяемо. Смотрите здесь: http://myok12.wordpress.com/2011/08/19/building-an-almighty-data-retrieval-system-for-all-html5-webapps/

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