Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с jQuery.getJSON (видемость массивов в нутри и снаружи конструкци) (https://javascript.ru/forum/jquery/4331-problema-s-jquery-getjson-videmost-massivov-v-nutri-i-snaruzhi-konstrukci.html)

mazovski 12.07.2009 12:26

Проблема с jQuery.getJSON (видемость массивов в нутри и снаружи конструкци)
 
var boxSort = new Array();
	var boxId = new Array();
	var boxName = new Array();
	var boxContent = new Array();
	var inum = 0;
		
	jQuery.getJSON("ajax.php",
    	function(data){
        jQuery.each(data, function(i,itemsss){	
			boxSort [inum] = itemsss.sort;
			boxContent [inum] = itemsss.content;
			boxName [inum] = itemsss.name;
			boxId [inum] = itemsss.id;
			inum++;
                       console.log(boxId [inum]); // тут все ОК
			if ( i == 0 ) return false;
          });
        });

console.log(boxId [0]); // дает undefined




загрузка json'a, в jQuery.getJSON массив виден boxName [0], а дальше не определено. Подскажите в чем проблема?

e1f 13.07.2009 13:17

Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.

mazovski 13.07.2009 13:49

Цитата:

Сообщение от e1f (Сообщение 24274)
Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.

e1f
можете подсказать решение проблемы?

e1f 13.07.2009 14:41

Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?

mazovski 13.07.2009 14:52

Цитата:

Сообщение от e1f (Сообщение 24290)
Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?

e1f,
На основе этих данных должны строится блоки.
в общем попробую, спасибо

e1f 13.07.2009 14:58

Хм... Так и стройте их в callback-функции, а не за ее пределами, должно сработать :)

mazovski 13.07.2009 15:10

Цитата:

Сообщение от e1f (Сообщение 24295)
Хм... Так и стройте их в callback-функции, а не за ее пределами, должно сработать :)

ага:) буду делать...

e1f,
Вопрост чисто теоретический, а возможноли из getJSON отправлять переменные к остальной странице?

чтобы
console.log(boxId [0]); // boxId был виден )))

e1f 13.07.2009 16:16

Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.

mazovski 13.07.2009 16:19

Цитата:

Сообщение от e1f (Сообщение 24307)
Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.

Грустно слышать:cray:
но ничего не поделаешь... :-?

e1f 13.07.2009 16:32

А почему грустно? Все логично: хотите переменную сразу - жертвуйте асинхронностью. В принципе, механизм callback-функций вполне способен реализовать все так, чтобы переменнные использовались тогда, когда они инициализированы нужными значениями


Часовой пояс GMT +3, время: 12:21.