 
			
				14.06.2016, 21:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2012 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				AJAX не модифицирует глобальные и внешние переменные
			 
			
		
		
		
		Допустим, есть глобальная переменная 
var j = {};
 
И есть AJAX запрос
 
function nnn () {
....
	$.ajax ({
		method: "GET",
		url: "../locale/forms.json",
		dataType: "json",
		error: function (jqxhr, status, errorMsg) {
			console.log("status: " + jqxhr.status + ", " + errorMsg + "; " + jqxhr.responseText);
			console.trace();
			console.dir();
		},
		success: function (data) {
			j["estimates"] = "test";
			console.log ("IN = " + j["estimates"]);
		}
	});
....
Есть еще в той же функции вывод в лог после AJAX
 
console.log ("AFTER: " + j["estimates"]);
 
В итоге в логе видим
 
AFTER: undefined 
IN = test
 
мало того, что последовательность нарушена, так еще и откатывается любое изменение внешней переменной, созданной не в AJAX, после завершения AJAX.
 
Как можно решить эту проблему? Требуется загрузить с сервера данные в JSON формате в соответствующий объект, чтобы потом МНОГОКРАТНО его использовать.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось reno4, 14.06.2016 в 21:43.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.06.2016, 21:39
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var v = {};
// ...........
v["estimates"] = "test";
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.06.2016, 21:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2012 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Poznakomlus
			 
		
	 | 
 
	
		
var v = {};
// ...........
v["estimates"] = "test";
	 | 
 
	
 
 В реальности перепробовал множество вариантов и тестов, ничего не помогает. Если внутри AJAX присваиваю переменной любое значение, то это значение не видно снаружи. Ваш вариант я, естественно, тоже пробовал.
 
Кроме того еще пробовал создавать объект JQuery и затолкать значение в него, но если он не был прицеплен к DOM, то при выходе из AJAX это значение терялось.
 
У кого какие мысли есть по этому поводу?  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось reno4, 14.06.2016 в 21:51.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 01:25
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		reno4 не будь инопланетянином
 
success: function (data) {
console.log(data); // 'этот ответ придет асинхронно по умолчанию, то есть через время
}
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 01:39
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2012 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Poznakomlus
			 
		
	 | 
 
	
		reno4 не будь инопланетянином 
success: function (data) {
console.log(data); // 'этот ответ придет асинхронно по умолчанию, то есть через время
}
	 | 
 
	
 
 Вы хотите сказать, что такого способа передать значение из AJAX внешней переменной не существует в принципе??
 
Но ведь тот же плагин DataTables как-то передает значения из AJAX в свои внешние переменные!  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 02:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.03.2013 
					
					
					
						Сообщений: 1,572
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		вы просто не хотите понять, что переменная изменится, но через время :-) 
так как по умолчанию ajax запросы асинхронны
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		По умолчанию, все запросы без перезагрузки страницы происходят асинхронно (то есть после отправки запроса на сервер, страница не останавливает свою работу в ожидании ответа). Если вам понадобиться синхронное выполнение запроса, то установите параметр в false. Кроссдоменные запросы и запросы типа "jsonp" не могут выполняться в синхронном режиме. 
 
Имейте ввиду, что выполнение запросов в синхронном режиме может привести к блокировке страницы, пока запрос не будет полностью выполнен.
	 | 
 
	
 
 можете убедиться добавив
 
async: false,
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 04:12
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2012 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Poznakomlus
			 
		
	 | 
 
	
		вы просто не хотите понять, что переменная изменится, но через время :-) 
так как по умолчанию ajax запросы асинхронны 
 
можете убедиться добавив 
async: false,
 
	 | 
 
	
 
 Убедился, спасибо. А как же тогда быть с получением в формате JSON ассоциативного массива, точнее, с записью его в объект-переменную? Не ставить же из-за этого синхронный режим, коряво как-то будет. А процедура, создающая у меня форму на основании этого массива, если не получит своевременно данные, не сможет создать форму. Какие на этот счет есть способы решения, не в курсе?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 05:36
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от reno4
			
		
	 | 
 
	| 
		процедура, создающая у меня форму на основании этого массива, если не получит своевременно данные, не сможет создать форму
	 | 
 
	
 
 
Надо полагать, что в этом случае форма создается по требованию и на время, так значит и создавать ее нужно сразу после запроса, а процедура, это и будет функция success Ajax.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 15:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2012 
					
					
					
						Сообщений: 11
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	| 
		Надо полагать, что в этом случае форма создается по требованию и на время, так значит и создавать ее нужно сразу после запроса, а процедура, это и будет функция success Ajax.
	 | 
 
	
 
 Форм много и каждая из них создается неоднократно. И вы предлагаете мне каждый раз дергать при этом AJAX, нагружая сразу 2 сервера лишними запросами? Умножим это на многотысячное количество пользователей. Получим ощутимые дополнительные тормоза, которых могло бы и не быть.
 
Я уже рассматривал ваш подход в самом начале и от него пришлось отказаться по указанной выше причине. Нужно именно МНОГОКРАТНОЕ использование полученных данных.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.06.2016, 15:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от reno4
			
		
	 | 
 
	| 
		Форм много и каждая из них создается неоднократно. И вы предлагаете мне каждый раз дергать при этом AJAX, нагружая сразу 2 сервера лишними запросами?
	 | 
 
	
 
 Меняйте логику, кто же вам запрещает. Я не предлагаю дергать, я вообще не знаю, сколько у вас форм, с какой кучи серверов они запрашиваются, но уж коли так, то почему их не приготовить сразу при загрузке страницы, если уж  именно МНОГОКРАТНОЕ использование полученных данных?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |