2016-01-09 2 views
0

Я проверил все доступные вопросы, и я понимаю, что есть некоторые странности при работе с циклами $ .each jQuery. Я не могу понять, почему переменная, объявленная вне этой области, но инициализированная внутри нее, также будет потеряна. Я не имею дело с DOM на данный момент, просто используя getJSON, чтобы вытащить некоторые данные и передать их другим функциям для последующего использования.

Это все, что я пытаюсь сделать, и я полностью озадачен.

function getJSONData(){ 
    var ar = []; 

    $.getJSON('pathto.json', function(data){ 
      $.each(data, function(k,v){ 
      ar.push(k); // lots of data in ar 
     });  
    }); 

    return ar; // ar is empty again. 
} 

Есть ли ключ к пониманию здесь? Я пробовал каждую перестановку «этого», о которой я могу думать, и инициализацию ar в цикле getJSON.

Большое спасибо!

+0

Вы уверены, что есть на самом деле какие-либо данные, добавленные в 'ar' в цикле? –

ответ

1

getJSON является асинхронным, так что функция будет возвращать сразу, прежде чем ар населен вам нужно сделать что-то вроде этого:

function getJSONData(callback){ 
    $.getJSON('pathto.json', function(data){ 
     var ar = []; 

     $.each(data, function(k,v){ 
      ar.push(k); // lots of data in ar 
     }); 

     callback(ar); 
    }); 
} 

getJSONData(function(ar) { 
    console.log(ar); 
}); 
+0

> getJSON является асинхронным, поэтому функция вернется сразу же после заполнения ar Doh! Теперь все это имеет смысл. Большое спасибо! – jerome