Где хранить данные, полученные от сервера?
Подскажите плз, как мне хранить данные, что бы каждый раз не делать к серверу ajax ($http) запросы. Делаю приложение, на бекенде есть куча апи, по которым я получаю определенные данные. Вот например я получаю ссылку на аватар юзера, как это сделать один раз при логине в приложении и при обновлении страницы не слать опять этот запрос?
Все обращения к апи сервера у меня сделаны в сервисах, потом использую данные в контроллерах. Как получать данные 1 раз от сервера и где то их записывать и каждый раз не слать лишние пост запросы на апи сервера? Подскажите плз. |
Используй LocalStorage или IndexedDB.
|
Все зависит от количества таких данных. Можно просто сделать свой сервис, который будет иметь функцию по получению нужных данных. Результат ajax запроса кешировать в самом сервисе.
Если данных много, то, как писали выше. Но тут еще нужно понимать, что в этом случае данные на сервере и в, к примеру, LocalStorage могут быть не одинаковыми. Т.е. нужно будет их как-то синхронизировать при старте. |
а подскажите пример, как можно закешировать данные в сревисе? Это то, что нужно....данных не много, которые нужно получать один раз при логине юзера, это жсон массив объектов по сути...я думаю кеширование в сервисе то что нужно.
|
Я вот так делаю
App.factory('MyService', [ '$document','$q','$timeout','$log','$http','$rootScope', function($document , $q , $timeout , $log , $http , $rootScope ) { // КЕШ загруженных данных var m_dataCache = {}; // Сервис var service = { // Загрузка данных load : function(userID) { // Загрузка файлов var deferred = $q.defer(); // if( angular.isDefined(m_dataCache[userID]) ) { // Вернуть данные из КЕШ-а deferred.resolve(m_dataCache[userID]); } else { // Загружаем данные $http.post("/getUserInfo.php", {id : userID}).then(function (result) { // Запомнить в КЕШ m_dataCache[userID] = result; // Вернуть данные deferred.resolve(result); } }, function (reason) { // Вернуть ошибку deferred.reject(reason); } ); } return deferred.promise; } }; return service; }] ); |
мне не очень понятно. я хочу закешировать данные, в момент, когда юзер залогинен, что бы не делать ненужные ajax запросы, в вашем же случае при обновлении страницы, естественно нет данных уже в кеше
и запрос отсылается все равно каждый раз. Цитата:
|
desperado,
Я кеширую данные в переменную m_dataCache. Если вы замените её на LocalStorage или IndexedDB, то тогда лишние запросы делаться не будут |
Часовой пояс GMT +3, время: 08:02. |