12.07.2009, 12:26
|
Интересующийся
|
|
Регистрация: 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.
|
|
13.07.2009, 13:17
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.
|
|
13.07.2009, 13:49
|
Интересующийся
|
|
Регистрация: 12.07.2009
Сообщений: 23
|
|
Сообщение от e1f
|
Потому что аякс-запрос выполняется асинхронно, и последний console.log выполяняется до выполнения callback'a на аякс.
|
e1f
можете подсказать решение проблемы?
|
|
13.07.2009, 14:41
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?
|
|
13.07.2009, 14:52
|
Интересующийся
|
|
Регистрация: 12.07.2009
Сообщений: 23
|
|
Сообщение от e1f
|
Либо делать синхронный запрос (не особо), либо переработать саму логику своего приложения. Для чего и где Вам потом использовать boxId? Возможно, дальнейшие действия с ним можно положить в тот же callback на аякс?
|
e1f,
На основе этих данных должны строится блоки.
в общем попробую, спасибо
|
|
13.07.2009, 14:58
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Хм... Так и стройте их в callback-функции, а не за ее пределами, должно сработать
|
|
13.07.2009, 15:10
|
Интересующийся
|
|
Регистрация: 12.07.2009
Сообщений: 23
|
|
Сообщение от e1f
|
Хм... Так и стройте их в callback-функции, а не за ее пределами, должно сработать
|
ага буду делать...
e1f,
Вопрост чисто теоретический, а возможноли из getJSON отправлять переменные к остальной странице?
чтобы
console.log(boxId [0]); // boxId был виден )))
|
|
13.07.2009, 16:16
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.
|
|
13.07.2009, 16:19
|
Интересующийся
|
|
Регистрация: 12.07.2009
Сообщений: 23
|
|
Сообщение от e1f
|
Он будет виден, скажем так, спустя некоторое время. То есть тогда, когда выполнится колбек, где он и опредляется. А вот когда это произойдет -- хз, зависит и от времени получения ответа от сервера. Но после завершения аякса переменная у Вас будет определена.
|
Грустно слышать
но ничего не поделаешь...
|
|
13.07.2009, 16:32
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
А почему грустно? Все логично: хотите переменную сразу - жертвуйте асинхронностью. В принципе, механизм callback-функций вполне способен реализовать все так, чтобы переменнные использовались тогда, когда они инициализированы нужными значениями
|
|
|
|