首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在HTML中嵌入JSON有标准吗?

在HTML中嵌入JSON有标准吗?
EN

Stack Overflow用户
提问于 2013-01-18 17:16:18
回答 4查看 31.8K关注 0票数 21

我想在HTML中嵌入JSON。我发现的最优雅的解决方案是使用script-tag和mime媒体类型application/json

代码语言:javascript
复制
<script id="data" type="application/json">
    {
        "foo" : "bar"
    }
</script> 

这是嵌入JSON的标准方式吗?如果没有,上述解决方案是否存在风险?

使用内联JSON (而不是JSON-P服务)的原因:

  • Small of JSON- data
  • Less HTTP-requests
  • Preference for inline-JSON to data in data

更新嵌入json的原因。

我有一个具有非常高流量的网站画廊小工具。该图库可以包含100张或更多的图像。我一次只显示一个图像,其余的图像将被延迟加载。然而,所有图像的信息(图像src)将在页面加载时在html中呈现。有各种方式可以在html中呈现图像信息。除了使用JSON,我还可以使用html数据属性,如下所示:

代码语言:javascript
复制
<li class="image" data-src="image-path.jpg">
    <!-- image tag will be created here using javascript -->
</li>

将导致:

代码语言:javascript
复制
<li class="image image-loaded" data-src="image-path.jpg">
    <img src="image-path.jpg" />
</li>

上述解决方案的缺点是额外的标记。我更喜欢使用JSON和一个Javascript模板引擎,比如doT.js

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-18 18:12:42

使用内联JSON (而不是

-P服务)的原因

您也可以内联JSON-P。好的,您只需调用该方法“内联脚本”,但它具有两者的优点:-)

票数 2
EN

Stack Overflow用户

发布于 2014-01-09 22:15:55

你的建议是完全正确的。script标记的type属性必须是有效的MIME描述符。根据the official JSON RFC第6节"IANA注意事项“:

JSON text的MIME媒体类型是application/json。

类型名称:应用程序

子类型名称: json

所以你的HTML是有效的:

代码语言:javascript
复制
<script id="data" type="application/json">
    {
        "foo" : "bar"
    }
</script> 

而且,不会的,这样做不会有额外的风险。

票数 8
EN

Stack Overflow用户

发布于 2013-01-25 22:49:26

我是在回答我自己的问题,因为我必须找到一个解决方案。我的解决方案是基于Bergi建议的使用内联JSONP。这是一个比找到我实际问题的答案更好的解决方案,因为不需要手动JSON解析。

JSON数据(和HTML)是用Java Server Pages (JSP)生成的。

步骤1

使用JSP创建自定义变量名。它将被用作json数据将被分配到的javascript全局变量。该名称是随机生成的,以防止在同一页面上发生命名冲突。

代码语言:javascript
复制
<c:set var="jsonpVarName">jsnpData<%= java.lang.Math.round(java.lang.Math.random() * 1000000) %></c:set>    

Step 2脚本标记有一个标识它的cssClassname和一个data-var-attribute,这样就可以确定自定义变量名了。${ctrl.json}是JSP并打印出JSON。与使用回调函数的JSONP不同,JSONP使用全局变量。到目前为止,我还没有遇到任何缺点。

代码语言:javascript
复制
<script class="data" data-var="${jsonpVarName}" type="text/javascript">
    window.${jsonpVarName} = ${ctrl.json};
</script>

第3步访问数据(使用jQuery)非常简单:

代码语言:javascript
复制
var data = window[$('script.data').data('var')];

使用context的示例

HTML

代码语言:javascript
复制
<div class="myWidget">
    <button class="fetchData">Fetch Data</button>


    <c:set var="jsonpVarName">jsnpData<%= java.lang.Math.round(java.lang.Math.random() * 1000000) %></c:set>

    <script class="data" data-var="${jsonpVarName}" type="text/javascript">
        window.${jsonpVarName} = ${ctrl.json};
    </script>

</div> 

Javascript

代码语言:javascript
复制
$('button.fetchData', '.myWidget').click(function (e) {

    var data = window[$('script.data', '.myWidget').data('var')];    

});

我使用内联JSONP来加载页面加载所需的JSON-data。它的数据量不是很大,而且减少了一个HTTP请求。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14395682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档