将JavaScript数据块(JSON)插入HTML页面
Insert JavaScript data chunk (JSON) into an HTML page
我需要在我的HTML页面中包含一个JavaScript对象(JSON)。
在服务器上呈现页面HTML的同时呈现JSON。使用AJAX调用检索的数据是而不是。我可以想到两种方法来做到这一点,并寻求反馈和建议。与页面一起传递JavaScript (JSON) blob的好实践是什么?
选项1
HTML:<script type='text/javascript'>
var model = { <JSON> };
</script>
. js:
function doSomething() { <use this.model here> }
选项2
HTML:<script type='text/javascript'>
loadModel({<JSON>});
</script>
.js(包含在HTML文件的顶部):
var model = null;
function loadModel(model) { this.model = model; }
function doSomething() { <use this.model here> }
变异JSON可以存储在单独的.js文件中,而不是在HTML中包含JSON。对此有何评论?
选项1允许您在任何地方包含.js文件,并将其包含在页面底部使其呈现更快(好事),但由于JavaScript在页面上呈现模型,这使得它成为一个没有意义的点。仍然不依赖于.js包含的位置,使其更不容易出错。
r#还抱怨(合理地)模型未初始化。
选项2感觉更好(它更好地封装了细节),但是.js必须在调用loadModel
之前包含。
这两种方式我都见过,也都做过,但没有注意到其中一种方式比另一种方式有什么显著的优势。
服务器平台应该无关紧要,但它是IIS 7.5/ASP。. NET MVC 3/Razor
忘记你的两个建议吧——它们都非常容易受到XSS的攻击。永远不要在脚本标签中放置不可信的文本。
请使用owasp的推荐。
把你的(HTML编码的)JSON放在DOM中,像这样:
<div id="init_data" hidden>
<%= html_escape(data.to_json) %>
</div>
然后在JavaScript中这样读:
// external js file
var dataElement = document.getElementById('init_data');
// decode and parse the content of the div
var initData = JSON.parse(dataElement.textContent);
选项二的开销会稍微大一些。因为你有一个函数调用的开销,和一个额外的变量(你的参数),它将被分配和释放。
正如你所说,两种方法都没有什么优点/缺点。
你会使用jQuery吗?然后你可以使用DOM ready事件,而不是在HTML中包含javascript。
编辑:嗯,在这种情况下,您可以在生成页面时将JSON包含在隐藏元素中。然后在DOM ready事件中,您可以使用jQuery从页面读取和解析它。
另一种选择可能是使用HTML 5数据属性,并将数据包含在其中之一。
如果是我,我可能会使用ajax调用,因为它更容易,看起来更干净。
- 使用PHP插入HTML在JavaScript上不起作用
- 如何使用innerHtml正确插入html
- AngularJS指令,在元素后插入HTML
- 使用jQuery插入HTML页面的第一个项目缺少结束标记
- 通过jQuery插入HTML不起作用
- 通过javascript以编程方式将文件插入HTML输入
- 在DIV中动态插入HTML并访问新元素
- 在所有元素中插入HTML
- 在其他图像下使用javascript将图像插入html
- 在工具提示Javascript中插入HTML
- 在HTML字符串的某个段落后插入HTML
- 可以插入在插入HTML标记之前
- 从 AngularJS 将文本插入 HTML
- 将 javascript 返回值插入 html
- 流路由器 - 将内容插入 HTML 模板
- 插入html时是否有触发事件的方法
- JavaScript-插入HTML的内容部分
- jquery多次在元素之间插入html
- 将当前年份插入HTML
- 在光标位置插入HTML,并使用javascript将光标移动到插入的HTML的末尾