Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中同步包含JSON数据而无需解析?_Javascript_Json_Parsing_Getjson_Synchronous - Fatal编程技术网

如何在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规范已经发布。