Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2009, 12:26
Интересующийся
Отправить личное сообщение для mazovski Посмотреть профиль Найти все сообщения от mazovski
 
Регистрация: 12.07.2009
Сообщений: 23

Проблема с 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], а дальше не определено. Подскажите в чем проблема?

Последний раз редактировалось mazovski, 13.07.2009 в 15:11.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2009, 13:17
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2009, 13:49
Интересующийся
Отправить личное сообщение для mazovski Посмотреть профиль Найти все сообщения от mazovski
 
Регистрация: 12.07.2009
Сообщений: 23

Сообщение от e1f Посмотреть сообщение
Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.
e1f
можете подсказать решение проблемы?
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2009, 14:41
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2009, 14:52
Интересующийся
Отправить личное сообщение для mazovski Посмотреть профиль Найти все сообщения от mazovski
 
Регистрация: 12.07.2009
Сообщений: 23

Сообщение от e1f Посмотреть сообщение
Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?
e1f,
На основе этих данных должны строится блоки.
в общем попробую, спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2009, 14:58
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Хм... Так и стройте их в callback-функции, а не за ее пределами, должно сработать
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2009, 15:10
Интересующийся
Отправить личное сообщение для mazovski Посмотреть профиль Найти все сообщения от mazovski
 
Регистрация: 12.07.2009
Сообщений: 23

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

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

чтобы
console.log(boxId [0]); // boxId был виден )))
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2009, 16:16
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2009, 16:19
Интересующийся
Отправить личное сообщение для mazovski Посмотреть профиль Найти все сообщения от mazovski
 
Регистрация: 12.07.2009
Сообщений: 23

Сообщение от e1f Посмотреть сообщение
Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.
Грустно слышать
но ничего не поделаешь...
Ответить с цитированием
  #10 (permalink)  
Старый 13.07.2009, 16:32
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

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



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

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