加载返回JSON对象的JSON文件的方法

时间:2014-04-09 20:19:06

标签: javascript json

是否有JavaScript方法/函数或创建方法/函数来加载JSON文件的方法,这将不需要在加载文件后运行回调参数,只需等待然后返回JSON对象一次满载(没有库)?

例如,如果我的文件something.json包含以下内容:

{
    "name":"John Smith",
    "age":"40"
}

我的JavaScript(在同一台服务器上)如下:

var person = loadJsonFile("something.json");
console.log("Name: " + person.name);
console.log("Age:  " + person.age);

我的控制台会显示:

Name: John Smith
Age:  40

我不能使用异步,因为这是在一个函数内,我无法确定该方法的结果将用于什么。另外我不能,因为加载调用之后的所有方法都依赖于该调用的返回,并且由于函数的作用域,有很多我不能放入另一个函数。

2 个答案:

答案 0 :(得分:1)

从技术上讲,可以同步加载JSON文件。 3rd argument of the open method of XMLHTTPRequest是布尔值:如果将其设置为false,则在收到响应之前,send方法不会返回。

这有两个严重的问题:首先,浏览器将一直挂起,直到响应到来,其次,一些浏览器总是执行异步请求,与此参数无关(例如Firefox 30+)。不要害怕异步,使用回调。如果需要,您可以连接回调串联,例如参见here(本书是关于Node.js的,但本页提到的技术也可用于客户端JavaScript)。

说实话,我曾经使用过这种方法,当我不得不将Firefox扩展程序移植到Chrome时。我想实现函数require,它同步加载JavaScripts模块,这种方法是我能想出的唯一方法。

答案 1 :(得分:0)

创建一个这样的方法(复制的部分,给予信用):

function loadJsonFile(file)
{
    "use strict";
    //THIS PORTION IS COPIED FROM: http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_asyncfalse
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET",file,false); //modified
    xmlhttp.send();
    //END COPIED PORTION
    return xmlhttp.responseText;
}