2013-04-18 2 views
1

Вот мой код:jQuery.each() и массив Манипуляция

$(document).ready(function() { 
    var myArray = []; 
    $.getJSON("some url",function(data){ 
     $.each(data, function(){ 
      myArray.push("a string" + this); 
     }); 
     alert(myArray); 
    }); 
    //alert(myArray); 
}); 

код, как показано работает просто отлично и отображает массив и его содержимое.

Однако, когда я пытаюсь отобразить массив, имея командную строку сразу после блока кода $.each (закомментированный в примере кода), массив и его содержимое не отображаются. Вместо этого возвращается пустое/пустое сообщение.

Почему это происходит и как я могу это исправить? Я хотел бы иметь команду «alert(myArray);» сразу после блока $.each.

Спасибо заранее!

+4

Ajax является асинхронным. Вы должны использовать данные, возвращаемые внутри обратного вызова, а не снаружи. Он не может быть исправлен без перехода на 'async: false', но это ужасная идея. –

+0

Второе предупреждение запускается до того, как json берется с сервера, поэтому он пуст. – Dementic

+2

Это один из самых распространенных вопросов на этом сайте. См. [Этот ответ] (http://stackoverflow.com/a/14220323/778118) для получения дополнительной информации о том, что вы испытываете. – jahroy

ответ

0
var myArray = []; 
var jqxhr = $.getJSON("some url", function(data) { 
    $.each(data, function(){ 
    myArray.push("a string" + this); 
    }); 
}) ; 

jqxhr.complete(function() { 
    console.log(myArray); 
}); 

JQuery XHR объект, или "jqXHR" возвращается $ .getJSON()

Когда запрос уже завершен, .complete() обратного вызова немедленно уволен.

+0

Просьба пояснить ваш код/​​изменения. – Novocaine

Смежные вопросы