如何在javascript中同步包含JSON数据而无需解析?
如何在javascript中同步包含JSON数据而无需解析?,javascript,json,parsing,getjson,synchronous,Javascript,Json,Parsing,Getjson,Synchronous,我想将包含数组的JSON文件从我自己的服务器加载到javascript对象变量中。 我希望在页面加载开始时以同步方式执行此操作,因为页面加载期间需要数据 我设法使用了jQuery.getJSON,但这是异步ajax,似乎有点过分了 有没有一种方法可以在不进行自己的解析的情况下以同步方式加载JSON?(或多或少类似于使用) 提前感谢您的帮助,希望这是有意义的,因为我是一个javascript新手。 Paolo如果使用某种服务器脚本,可以将数据打印到页面上的脚本标记中: <script typ
我想将包含数组的JSON文件从我自己的服务器加载到javascript对象变量中。
我希望在页面加载开始时以同步方式执行此操作,因为页面加载期间需要数据 我设法使用了jQuery.getJSON,但这是异步ajax,似乎有点过分了 有没有一种方法可以在不进行自己的解析的情况下以同步方式加载JSON?
(或多或少类似于使用
)
提前感谢您的帮助,希望这是有意义的,因为我是一个javascript新手。
Paolo如果使用某种服务器脚本,可以将数据打印到页面上的脚本标记中:
<script type="text/javascript">
var settings = <?php echo $json; ?>;
</script>
var设置=;
这将允许您同步使用数据,而不是尝试异步使用AJAX
否则,您必须等待AJAX回调,然后才能继续执行您正在执行的任何操作。getJSON()
只是AJAX()
函数和数据类型:'json'
集的简写。ajax()
函数将允许您定制大量有关请求的信息
$.ajax({
url: 'MyArray.json',
async: false,
dataType: 'json',
success: function (response) {
// do stuff with response.
}
});
您仍然使用带有async:false
的回调,但它会在从ajax调用继续执行之前触发。现在开始:
// 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 && xmlhttp.readyState == 4 )
{
return xmlhttp.responseText;
}
else {
// TODO Throw exception
return null;
}
}
注意:此代码仅适用于现代浏览器-IE8、FF、Chrome、Opera、Safari。对于obosolete IE版本,您必须使用ActiveX,如果需要,请告诉我,我会告诉您如何使用;) 我只需要读取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...
}
如果RequireJS是一个选项,那么可以使用RequireJS将其作为依赖项。我用它来模拟角度应用程序中的数据。在应用程序引导之前,一些模拟数据必须存在
//Inside file my/shirt.js:
define({
color: "black",
size: "unisize"
});
只需将json数据包装在define中,并将其声明为依赖项。此处的更多信息:AFAIK jQuery不推荐使用同步XHR请求,因为可能会出现性能问题。您可以尝试在XHR响应处理程序中包装应用程序代码,如下所示:
$(document).ready(function() {
$.get('/path/to/json/resource', function(response) {
//'response' now contains your data
//your app code goes here
//...
});
});
没有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)
取决于服务器。我认为在执行var json=为什么需要同步请求这样的操作时没有问题?我想我希望它是同步的,因为我想等待我的变量用json内容初始化,然后再在下面的语句中使用它(没有json数据就没有意义了)。如果我理解正确,json=需要通过http请求加载jsonString,对吗?我发现这篇简短的教程很容易理解:在jQuery中同步加载json以获得同步请求,200状态永远不起作用。总是会抛出异常。这正是我想要做的。所以没有一种方法可以将JSON作为页面资源()包含,然后从中读取?我必须在包含的文件中声明吗?这感觉像是一种非常肮脏的itI think async:false不推荐使用,因为至少jQueryV1.11是这样。以下是我在控制台中得到的消息:主线程上的同步XMLHttpRequest被弃用,因为它对最终用户的体验有不利影响。要获得更多帮助,请检查。可能它已被弃用,那么还有什么替代方案?那不是HTML。这不是同步的。这在异步函数之外不起作用。jQuery没有弃用同步XHR请求。XHR规范已经发布。