2013-02-17 2 views
0

다음 코드는 json 파일을로드하고 questions라는 배열을 만듭니다.
getArray 함수 내에서 console.log (JSON.stringify (questions))를 수행하면 문제가 없지만 동일한 outsite 함수가 작동하지 않으면 시도한 결과
alert (JSON.stringify 질문)), 경고 (questions.length) [0]을 반환하고, 내 실수는 어디입니까 ?? 이 asynchoronous 때문에내 배열 json이 비어있는 이유는 무엇입니까?

var questions = []; 
function getArray(){ 
    $.getJSON('questions.json', function (json) { 
     for (var key in json) { 
      if (json.hasOwnProperty(key)) { 
       var item = json[key]; 
       questions.push({ 
        Category: item.Category 
       }); 
      } 
     } 
     //console.log(JSON.stringify(questions)); //it works 
      return questions; 
    }); 
} 
$(document).ready(function(){ 
getArray(); 
}); 

alert(JSON.stringify(questions)) //return [] 
alert(questions.length) //return 0 
+1

http://stackoverflow.com/questions/14916940/how -to-get-array-json-of-json-file). 'alert()'는 동기적이고 다른 것들보다 먼저 실행됩니다. 왜냐하면 나머지는 비동기적이고 이벤트 구동이기 때문입니다. 코드가 특정 순서로 작성 되었기 때문에 동일한 순서로, 특히 이벤트로 작업 할 때 코드가 실행되는 것을 보장하지 않습니다. –

+2

이것은 하루에 5 번 물었습니다 ... AJAX는 비동기식입니다. – charlietfl

답변

3

당신은 return을 사용할 수 없습니다합니다 ([이전 답변]에 설명 된대로 문제는 타이밍입니다

var callback = function(questions) { 
    // Do something with questions here. 
    alert(questions.length); 
} 

var questions = []; 
function getArray(){ 
    $.getJSON('questions.json', function (json) { 
     for (var key in json) { 
      if (json.hasOwnProperty(key)) { 
       var item = json[key]; 
       questions.push({ 
        Category: item.Category 
       }); 
      } 
     } 
     callback(questions); 
    }); 
} 
$(document).ready(function(){ 
getArray(); 
}); 
관련 문제