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