0

我有下一个加载文件 json 的代码,并创建一个名为 questions 的数组。
如果我在 getArray 函数中执行 console.log(JSON.stringify(questions)) 它可以正常工作,但是如果我在外部执行相同的函数它不起作用,我尝试使用
alert(JSON.stringify(questions)) 和alert(questions.length) 它返回 [] 和 0,我的错误在哪里?

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
4

1 回答 1

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();
});
于 2013-02-17T02:37:11.693 回答