| 
	| 
	
	| 
		
	| 
			
			 
			
				14.11.2016, 16:30
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 14.11.2016 
						Сообщений: 5
					 
		
 |  |  
	| 
				Как получить полученные json данные из вне функции
			 Есть файл json.php, который генерирует json данные такого вида: json.php
 [{"id":"1","par1":"par1","par2":"par2"},
 {"id":"2","par1":"par1","par2":"par2"},
 {"id":"3","par1":"par1","par2":"par2"}]
 
 есть файл которые принимает данные и обрабатывает. в данном случае выводит значение json данных
 index.
 $.post(
 "json.php",
 onAjaxSuccess
 );
 
 function onAjaxSuccess(data){
 data = JSON.parse(data);
 alert( data[0]['id'] );
 }
 
 ...тут
 
 
 Задача состоит в том, как вывести тот же (data[0]['id']) значение, но из вне функции (...тут)
 
 Не судите строго, решение очень необходимо.
 Заранее спасибо всем!!!
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 16:35
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 27.11.2015 
						Сообщений: 2,899
					 
		
 |  |  
	| dztop,
 
 var here;
 $.post(
 "json.php",
 onAjaxSuccess
 );
 
 function onAjaxSuccess(data){
 data = JSON.parse(data);
 here = data[0]['id'];
 alert( data[0]['id'] );
 }
 
 alert(here);
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 16:46
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 14.11.2016 
						Сообщений: 5
					 
		
 |  |  
	| Выдает окно: undefinedИ если можно, поясните как в общем получить доступ к массиву data из вне.
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 16:49
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 14.11.2016 
						Сообщений: 5
					 
		
 |  |  
	| Dilettante_Pro,Выдает окно: undefined
 И если можно, поясните как в общем получить доступ к массиву data из вне.
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 17:22
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 27.11.2015 
						Сообщений: 2,899
					 
		
 |  |  
	| 
	
 
	| Сообщение от dztop   |  
	| Dilettante_Pro, Выдает окно: undefined
 И если можно, поясните как в общем получить доступ к массиву data из вне.
 |  
	
 до внесения изменений что выдавал? 
всё выделенное жирным шрифтом вписал?
 
data в целом - точно так же, через внешнюю глобальную переменную 
Да, еще - ajax - асинхронный запрос, поэтому данные вовне функции появятся не сразу.
 
попробуй  
setTimeout(alert(here),2000); 
(задержку подобрать) 
или в onAjaxSuccess сгенерить какое-нибудь событие, по которому смотреть результат			 Последний раз редактировалось Dilettante_Pro, 14.11.2016 в 17:27.
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 17:26
			
			
			
		 |  
	| 
		
			|  | Тлен       |  | 
					Регистрация: 02.01.2010 
						Сообщений: 6,601
					 
		
 |  |  
	| Никак. Код "извне" отрабатывает сразу "прям сейчас", функция onAjaxSuccess, принимающая данные срабатывает "потом", когда сервер ответит и данные придут.
 Разбивайте код логически на функции, и по цепочке вызывайте функции из функций по мере надобности.
 
				__________________ 29375, 35
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 18:14
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 14.11.2016 
						Сообщений: 5
					 
		
 |  |  
	| Dilettante_Pro спасибо за мысль умную, все оказалось просто:var dataJson = $.ajax({
 url: "json.php",
 type: "json",
 dataType: "html",
 async:false
 }
 ).responseText;
 
 var data = JSON.parse(dataJson);
 alert( data[0]['id'] )
 
 Только нужно было выключить асинхронный запрос
 |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 18:14
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 14.11.2016 
						Сообщений: 5
					 
		
 |  |  
	| 
	
 
	| Сообщение от Dilettante_Pro |  
	| спасибо за мысль умную, все оказалось просто: var dataJson = $.ajax({
 url: "json.php",
 type: "json",
 dataType: "html",
 async:false
 }
 ).responseText;
 
 var data = JSON.parse(dataJson);
 alert( data[0]['id'] )
 
 Только нужно было выключить асинхронный запрос
 |  
	
 спасибо за мысль умную, все оказалось просто: 
var dataJson = $.ajax({ 
url: "json.php", 
type: "json", 
dataType: "html", 
async:false 
} 
).responseText;
 
var data = JSON.parse(dataJson); 
alert( data[0]['id'] )
 
Только нужно было выключить асинхронный запрос |  |  
	| 
		
	| 
			
			 
			
				14.11.2016, 19:39
			
			
			
		 |  
	| 
		
			|  | Тлен       |  | 
					Регистрация: 02.01.2010 
						Сообщений: 6,601
					 
		
 |  |  
	| Только так делать нельзя, потому что вся страница висит пока идёт запрос, а та да. 
				__________________ 29375, 35
 |  |  
	| 
		
	| 
			
			 
			
				15.11.2016, 16:00
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 27.11.2015 
						Сообщений: 2,899
					 
		
 |  |  
	| dztop
Представьте, что setTimeout - это асинхронный запрос.
 
<button>Проверка ответа</button>
<script>
   var answer = 'Нет ответа';
   setTimeout(onAjaxSuccess, 5000);
   function onAjaxSuccess(data) {
      data = 'Ответ получен';
      answer = data;
      document.querySelector('button').click();
   };
   
  // тут
   document.querySelector('button').onclick = function() {
       alert(answer);
   };
</script>
 |  |  |  |