我有一个动态生成的页面,其中我希望使用静态JavaScript并将JSON字符串作为参数传递给它。我见过谷歌使用这种方法(参见Google's +1 Button: How do they do it?)。
但是,我应该如何从JavaScript中读取JSON字符串呢?
<html>
<head>
<script src="jquery-1.6.2.min.js"></script>
<script src="myscript.js">{"org": 10, "items":["one","two"]}</script>
</head>
<body>
Hello
</body>
</html>
在这个JavaScript中,我想使用HTML文档中的JSON参数{"org": 10, "items":["one","two"]}
。我不知道使用jQuery还是不使用它是最好的。
$(function() {
// read JSON
alert("the json is:")
})
发布于 2011-11-01 00:01:20
我会将脚本声明更改为:
<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>
注意type和id字段。在那之后
var data = JSON.parse(document.getElementById('data').textContent);
在所有浏览器中都能很好地工作。
需要type="application/json"
来防止浏览器在加载时对其进行解析。
我们之所以使用textContent
而不是innerHTML
或innerText
来读取原始的Json文本,是因为innerHTML
试图将内容解析为HTML,这将导致性能降低,并可能导致解析错误和XSS攻击,而且innerText
不会获取原始文本,而是寻找人类可见的文本,而textContent
获取的是纯文本(这正是您想要的)。有关innerHTML
和innerText
为什么不好的更多详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent。
发布于 2011-10-31 23:53:16
我最终得到了独立于jQuery的JavaScript代码。
var jsonElement = document.getElementById('json-script-tag');
var myObject = JSON.parse(jsonElement.textContent);
发布于 2017-05-25 02:06:19
在<script id="myJSON">
中阅读JSON
var manifest= document.getElementById('myJSON').innerHTML; //sets manifest to the text in #myJSON
manifest= JSON.parse(manifest) //Converts text into JSON
还可以使用像document.scripts[0]
这样的方法指向脚本
//var manifest= JSON.parse(document.getElementById('myJSON').innerHTML); /*Shortend of 2&3*/
var manifest= document.getElementById('myJSON').innerHTML; //Gets text in #myJSON
manifest= JSON.parse(manifest) //Converts it into JSON
document.getElementById('test').innerHTML= manifest.name+ '<br/>'+ manifest.otherOptions; //Displays it
console.log('manifest')
console.log(manifest);
<head>
<script type="application/json" id="myJSON">
{"name":"Web Starter Kit", "otherOptions":"directly here"}
</script>
</head>
<body>
<p id="test"></p>
</body>
https://stackoverflow.com/questions/7581133
复制相似问题