2010-01-03 2 views
3

У меня есть небольшой скрипт jQuery, который получает информацию, глядя на ID.

Каков наилучший способ предотвратить повторное использование одних и тех же данных (например, что лучше всего подходит для кеширования в jQuery)?

Я попытался использовать $.post и $.ajax с опцией «cache», установленной в true, но запрос отправляется более одного раза.

Лучше ли сохранять собранные данные и использовать наборы, чтобы узнать, нужно ли вам это запросить или нет?

Любые идеи и предложения приветствуются!

Если это имеет значение, я использую ASP.Net MVC на стороне сервера.

+0

Как ваш скрипт JQuery решения, что на запрос ? – Sampson

+0

Если пользователь нажимает «Детали» на элемент, запрос будет сделан (я хочу, чтобы это было сделано не более одного раза для каждого элемента). – Mickel

ответ

5

Опция cache, которую вы видели в документации, относится к кешу браузера.

Вы можете реализовать схему самостоятельно запоминании функций во многих отношениях, цель состоит в том, что функции результат для определенного аргумента (id в вашем случае) только вычисляется один раз.

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

var getInfo = (function() { 
    var cache = {}; // results will be cached in this object 

    return function (id, callback) { 
    if (cache[id] != null) { // if exist on cache 
     callback(cache[id]); 
     return; 
    } 
    // doesn't exists on cache, make Ajax request and cache it 
    $.post("info.url", { "id": id }, function (data) { 
     cache[id] = data; // store the returned data 
     callback(data); 
    }); 
    }; 
})(); 

Пример:

getInfo(5, function (data) { 
    alert(data); 
}); 
+1

Побей меня ... Я должен прекратить писать длинные ответы или писать быстрее :) Вам нужно, чтобы кэш var был объявлен вне функции. Внутри это будет не очень полезно. – Ariel

+1

Благодаря @Ariel, фактически переменная 'cache' находится за пределами возвращаемой функции, и она доступна через закрытие, созданное функцией самоисполнения. – CMS

+1

Это отличный пример одной из лучших функций Javascript (закрытий), используемых для memoization. Вы определенно хотите сохранить объект кеша внутри закрытия, чтобы он не просочился в эту ужасную выгребную яму глобального масштаба. –

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