0

我正在尝试将 JSON 文件读入全局对象数组。该代码有效,但我似乎无法找到将数据从 Ajax $.getJSON 调用中获取到全局变量中的方法。也许这是因为范围和/或同步。

我尝试了几种方法,并且正在使用以下代码读取 JSON 文件(请参阅Using Jquery to get JSON objects from local file):

var questions = {};

$(document).ready(function() {

    readJsonFile().done(function (questions) {
        // This outputs the array of objects (questions) OK ->
        console.log("Questions read from JSON file: " + questions);
    });

    // Cannot read from the array here
    console.log("Question 1: " + questions[0].question);

...

function readJsonFile() {
    return $.getJSON("questions.json").then(function (data) {
        // This was in the original post and didn't seem to return the array
        // return data.items;
        return data;
    });
};
4

2 回答 2

1

第一个控制台日志输出回调的参数。第二个输出全局对象。除了它们的名称相似之外,它们之间没有任何联系。你应该这样做:

 readJsonFile().done(function (data) {
        questions = data; // <- assigned the return data to the global object
        // This outputs the array of objects (questions) OK ->
        console.log("Questions read from JSON file: " + questions);
    });
于 2013-09-27T09:09:33.477 回答
0

好的。我想出了如何做到这一点...要同步加载 JSON 文件,请使用以下代码:

function readJsonFile() {
    $.ajax({
        type: 'GET',
        url: 'questions.json',
        dataType: 'json',
        success: function(data) {
            questions = data;
        },
        async: false
    });
};

调用此函数后,可以访问我的全局变量“问题”,因为回调会一直等到响应完成。显然,如果 Ajax 调用不成功,您会想要进行一些错误检查。

于 2013-09-28T09:57:55.207 回答