使用具有匿名回调函数的异步XMLHttpRequest()全局访问从本地文件读取的JSON对象?

时间:2015-07-01 07:34:45

标签: javascript ajax json

我试图使用this method(没有jQuery)操作从本地JSON文件加载的数据,但似乎无法访问全局范围内的对象:

 var actual_JSON;

 function loadJSON(callback) {   
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', 'my_data.json', true);
    xobj.onreadystatechange = function () {
          if (xobj.readyState == 4 && xobj.status == "200") {
            callback(xobj.responseText);
          }
      };
    xobj.send(null);  
 }

然后在加载文档后调用该函数,使用匿名函数,如下所示:

function loaded(e) {

    loadJSON( function(response) {
            actual_JSON = JSON.parse(response);
            console.log(actual_JSON); // Object {...}
        }
    );
    console.log(actual_JSON); // undefined
};

document.addEventListener("DOMContentLoaded", loaded, false);

不幸的是,我还没有完全理解闭包的概念以及它是否/如何影响actual_JSON的范围。它似乎仅在传递给loadJSON()的匿名函数内定义为XMLHttpRequest()的回调,尽管我在全局声明它。

1 个答案:

答案 0 :(得分:-1)

尝试在外部范围内定义actual_JSON

function loaded(e) {
    var actual_JSON;
    loadJSON( function(response) {
            actual_JSON = JSON.parse(response);
            console.log(actual_JSON); // Object {...}
        }
    );
    console.log(actual_JSON); // undefined
};

document.addEventListener("DOMContentLoaded", loaded, false);

此变量在function(response)范围内定义,但在loaded(e)范围内不可见。