HTML / Javascript:如何访问使用src设置的脚本标记中加载的JSON数据

我有我在服务器中生成的这个JSON文件,我想在客户端访问,因为页面是可见的。 基本上我想实现的是:

我有以下几点:

<script id="test" type="application/json" src="http:/myresources/stuf.json"> 

标签在我的html文档中声明。 源代码中引用的文件具有json数据。 正如我所看到的,数据已经被下载,就像脚本一样。

现在,我如何在JavaScript中访问它? 我已经尝试访问脚本标记,使用和不使用jQuery,使用大量的方法来获取我的JSON数据,但不知何故,这是行不通的。 如果将json数据以内联方式写入脚本,那么获得它的innerHTML将会起作用。 这是不是,而不是我想要实现的。

页面加载后的远程JSON请求也不是一个选项,如果你想build议。

你不能像这样加载JSON,抱歉。

我知道你在想“为什么我不能在这里使用src ?我看过这样的东西…”:

 <script id="myJson" type="application/json"> { name: 'Foo' } </script> <script type="text/javascript"> $(function() { var x = JSON.parse($('#myJson').html()); alert(x.name); //Foo }); </script> 

简而言之,就是脚本标签被“滥用”为数据持有者。 你可以用各种数据来做到这一点。 例如, 很多模板引擎利用脚本标签来保存模板 。

从远程文件中加载JSON的选项列表如下:

  1. 使用$.get('your.json')或其他这样的AJAX方法。
  2. 写一个文件,设置一个全局variables给你的JSON。 (看起来好笑)。
  3. 把它拉到一个不可见的iframe中,然后在加载之后刮掉它的内容(我称之为“1997模式”)
  4. 请教一个伏都教牧师。

最后一点:

页面加载后的远程JSON请求也不是一个选项,如果你想build议。

这没有任何意义 处理你的<script src=""> ,浏览器发送的AJAX请求和请求之间的区别本质上是没有的。 他们都会在资源上进行GET。 HTTP不关心,如果它是由于脚本标记或AJAX调用完成的,您的服务器也不会。

另一个解决scheme是使用服务器端脚本语言,并简单地包含json-data内联。 这是一个使用PHP的例子:

 <script id="data" type="application/json"><?php include('stuff.json'); ?></script> <script> var jsonData = JSON.parse(document.getElementById('data').textContent) </script> 

以上示例使用types为application/json的额外脚本标记。 更简单的解决scheme是将JSON直接包含到JavaScript中:

 <script>var jsonData = <?php include('stuff.json');?>;</script> 

带有额外标签的解决scheme的优点是JavaScript代码和JSON数据保持相互分离。

如果您需要从其他域加载JSON,请访问http://en.wikipedia.org/wiki/JSONP
但是请注意潜在的XSSI攻击: https ://www.scip.ch/en/ ? labs.20160414

如果它是相同的域,那么就使用Ajax。

这似乎是不可能的,或者至less不被支持。

从HTML5规范 :

当用来包含数据块 (而不是脚本)时, 数据必须embedded在内部,数据的格式必须使用type属性给定, 不能指定src属性 ,脚本元素的内容必须符合达到为使用的格式定义的要求。

检查这个答案: https : //stackoverflow.com/a/7346598/1764509

 $.getJSON("test.json", function(json) { console.log(json); // this will show the info it in firebug console });