Я обычно использую шаблон модуля кэширования для таких вещей:
// create a quick singleton to store cached data
var People = (function() {
// private variable to act as cache
var count;
// function to get cached data
// note: You have to assume it's always asynchronous
function getCount(callback) {
// have we loaded the data yet?
if (count===undefined) {
// cache miss: load the data, store it, do the callback
$.get("/People/getCount", function (data) {
count = data;
callback(data);
}
} else {
// cache hit - no need to reload
callback(count);
}
}
// provide access to the getter function
return {
getCount: getCount
};
}());
При первом попадании в кеш он будет загружаться с сервера; второй раз он будет загружаться из закрытой переменной.
// will load the data asynchronously
People.getCount(function(count) {
alert("First hit: " + count);
});
// will use the cached data
People.getCount(function(count) {
alert("Second hit: " + count);
});
В зависимости от сложности, которую вы хотите поддерживать, вы можете добавить дополнительные функции, такие как истечение срока действия кэша через определенный интервал, кэширование нескольких вызовов (потенциально связанных с URL-адресом AJAX) и т. Д. Мне нравится сохранять API простым и не ссылаться на него. URL-адреса AJAX - таким образом, ваш кеш действует как абстрагированный уровень обслуживания, и вы можете создать другую реализацию кеша для работы с различными источниками данных - полезную для таких вещей, как удаление данных до того, как вы реализовали свои обработчики AJAX на стороне сервера.