Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.01.2015, 13:14
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

Где хранить данные, полученные от сервера?
Подскажите плз, как мне хранить данные, что бы каждый раз не делать к серверу ajax ($http) запросы. Делаю приложение, на бекенде есть куча апи, по которым я получаю определенные данные. Вот например я получаю ссылку на аватар юзера, как это сделать один раз при логине в приложении и при обновлении страницы не слать опять этот запрос?

Все обращения к апи сервера у меня сделаны в сервисах, потом использую данные в контроллерах. Как получать данные 1 раз от сервера и где то их записывать и каждый раз не слать лишние пост запросы на апи сервера? Подскажите плз.
Ответить с цитированием
  #2 (permalink)  
Старый 13.01.2015, 13:56
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Используй LocalStorage или IndexedDB.
Ответить с цитированием
  #3 (permalink)  
Старый 13.01.2015, 15:17
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Все зависит от количества таких данных. Можно просто сделать свой сервис, который будет иметь функцию по получению нужных данных. Результат ajax запроса кешировать в самом сервисе.
Если данных много, то, как писали выше. Но тут еще нужно понимать, что в этом случае данные на сервере и в, к примеру, LocalStorage могут быть не одинаковыми. Т.е. нужно будет их как-то синхронизировать при старте.
Ответить с цитированием
  #4 (permalink)  
Старый 13.01.2015, 15:19
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

а подскажите пример, как можно закешировать данные в сревисе? Это то, что нужно....данных не много, которые нужно получать один раз при логине юзера, это жсон массив объектов по сути...я думаю кеширование в сервисе то что нужно.
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2015, 09:17
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Я вот так делаю
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;
	}]
);
Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2015, 14:14
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

мне не очень понятно. я хочу закешировать данные, в момент, когда юзер залогинен, что бы не делать ненужные ajax запросы, в вашем же случае при обновлении страницы, естественно нет данных уже в кеше
и запрос отсылается все равно каждый раз.

Сообщение от Shasoft Посмотреть сообщение
Я вот так делаю
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;
	}]
);
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2015, 14:30
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

desperado,
Я кеширую данные в переменную m_dataCache.
Если вы замените её на LocalStorage или IndexedDB, то тогда лишние запросы делаться не будут
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отобразить данные из базы на форме? ascherbakov AJAX и COMET 2 12.03.2014 15:55
где лучше хранить данные? denisjs Общие вопросы Javascript 15 10.01.2014 16:04
save() - где находятся данные при отправке на сервер? kuzroman Backbone.js 2 06.11.2013 22:42
где лучше спрятать данные? czp Общие вопросы Javascript 17 04.04.2012 13:08
передача массива с сервера subaru Общие вопросы Javascript 3 02.07.2008 19:57