我想从我自己的包含数组的服务器加载一个JSON文件到一个javascript对象变量
我希望在页面加载开始时以同步方式执行此操作,因为在页面加载期间需要数据。
我设法使用jQuery.getJSON,但这是asynch ajax,看起来有点矫枉过正。
有没有办法以同步方式加载JSON而不进行自己的解析?(或多或少像使用<script language="JavaScript" src="MyArray.json"></script>
)
提前感谢您的帮助,希望它是有道理的,因为我是一个javascript新手。 保罗
答案 0 :(得分:35)
getJSON()
只是设置ajax()
的{{1}}函数的简写。 dataType:'json'
功能可让您自定义很多有关请求的内容。
ajax()
你仍然使用$.ajax({
url: 'MyArray.json',
async: false,
dataType: 'json',
success: function (response) {
// do stuff with response.
}
});
的回调,但它在从ajax调用继续执行之前触发。
答案 1 :(得分:14)
你走了:
// Load JSON text from server hosted file and return JSON parsed object
function loadJSON(filePath) {
// Load json file;
var json = loadTextFileAjaxSync(filePath, "application/json");
// Parse json
return JSON.parse(json);
}
// Load text with Ajax synchronously: takes path to file and optional MIME type
function loadTextFileAjaxSync(filePath, mimeType)
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",filePath,false);
if (mimeType != null) {
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType(mimeType);
}
}
xmlhttp.send();
if (xmlhttp.status==200)
{
return xmlhttp.responseText;
}
else {
// TODO Throw exception
return null;
}
}
注意:此代码仅适用于现代浏览器 - IE8,FF,Chrome,Opera,Safari。对于obosolete IE版本,你必须使用ActiveX,如果你想要我会告诉你如何让我知道;)
答案 2 :(得分:3)
如果您使用的是某种服务器脚本,则可以将数据打印到页面上的脚本标记中:
<script type="text/javascript">
var settings = <?php echo $json; ?>;
</script>
这将允许您同步使用数据,而不是尝试异步使用AJAX。
否则你将不得不等待AJAX回调,然后再继续你正在做的事情。
答案 3 :(得分:1)
我只需要读取以json格式提供的小输入文件并提取少量数据。在这种情况下这很好用:
json文件与脚本位于同一目录中,名为data.json,它看起来像这样:
{"outlets":[
{
"name":"John Smith",
"address":"some street, some town",
"type":"restaurant"
},
..etc...
将数据读入js,如下所示:
var data = <?php echo require_once('data.json'); ?>;
访问以下数据项:
for (var i in data.outlets) {
var name = data.outlets[i].name;
... do some other stuff...
}
答案 4 :(得分:0)
如果RequireJS是一个选项,您可以使用requirejs使其成为依赖项。我用它来模拟我的Angular应用程序中的数据。在应用程序的引导程序之前,一些模拟数据是必不可少的。
//Inside file my/shirt.js:
define({
color: "black",
size: "unisize"
});
将json数据包装在一个define中,并将其声明为依赖项。更多信息:http://requirejs.org/docs/api.html#defsimple
答案 5 :(得分:-2)
AFAIK jQuery已弃用同步XHR请求,因为可能存在性能问题。您可以尝试将应用程序代码包装在XHR响应处理程序中,如下所示:
$(document).ready(function() {
$.get('/path/to/json/resource', function(response) {
//'response' now contains your data
//your app code goes here
//...
});
});
答案 6 :(得分:-2)
没有jQuery的现代HTML5方式将是:
var url="https://api.myjson.com/bins/1hk8lu" || "my.json"
var ok=await fetch(url)
var json=await ok.json()
alert(a.test)