如何在没有解析的情况下同步包含JSON数据?

我想从我自己的包含数组的服务器加载一个JSON文件到一个javascript对象变量。 我希望在页面加载开始时以同步方式执行此操作,因为在页面加载期间需要数据。 我设法使用jQuery.getJSON,但这是asynch ajax,它似乎有点矫枉过正。 有没有办法以同步的方式加载JSON而不进行自己的解析? (或多或少像使用
<script language="JavaScript" src="MyArray.json"></script>
) 在此先感谢任何帮助,希望它是有道理的,因为我是一个JavaScript新手。 保罗     
已邀请:
getJSON()
只是
ajax()
功能的简写,
dataType:'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)
  {
    return xmlhttp.responseText;
  }
  else {
    // TODO Throw exception
    return null;
  }
}
注意:此代码仅适用于现代浏览器 - IE8,FF,Chrome,Opera,Safari。对于obosolete IE版本,您必须使用ActiveX,如果您需要,请告诉我,我会告诉您如何;)     
如果您使用某种服务器脚本,则可以将数据打印到页面上的脚本标记:
<script type="text/javascript">
var settings = <?php echo $json; ?>;
</script>
这将允许您同步使用数据,而不是尝试异步使用AJAX。 否则你将不得不等待AJAX​​回调,然后再继续你正在做的事情。     
我只需要读取以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使其成为依赖项。我用它来模拟我的Angular应用程序中的数据。在应用程序的引导程序之前,一些模拟数据是必不可少的。
//Inside file my/shirt.js:
define({
    color: "black",
    size: "unisize"
});
只需将json数据包装在一个define中,并将其声明为依赖项。更多信息:http://requirejs.org/docs/api.html#defsimple     
由于可能存在性能问题,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)
    

要回复问题请先登录注册