Как я могу прочитать JSON в скрипте-теге из JavaScript?
у меня есть динамически генерируемая страница, где я хочу использовать статический JavaScript и передать ему строку JSON в качестве параметра. Я видел этот подход, используемый Google (см. кнопку Google +1: как они это делают?).
но как я должен прочитать строку JSON из JavaScript?
<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 я хотел бы использовать аргумент JSON {"org": 10, "items":["one","two"]} из документа HTML. Я не знаю, лучше ли это делать с jQuery или без него.
$(function() {
// read JSON
alert("the json is:")
})
4 ответов:
Я бы изменил объявление скрипта на это:
<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>поля типа и идентификатора Примечания. После этого
var data = JSON.parse(document.getElementById('data').innerHTML);будет работать нормально во всех браузерах.
The
type="application/json"необходимо, чтобы предотвратить браузер от разбора его во время загрузки.
Я закончил с этим кодом JavaScript, чтобы быть независимым от jQuery.
var json = document.getElementsByTagName('script'); var myObject = JSON.parse(json[json.length-1].textContent);
читать JSON в
<script id="myJSON">использовать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>
JSON.parse($('script[src="mysript.js"]').html());или изобрести какой-нибудь другой способ идентификации скрипта.
может, вместо
.html()вам понадобится.text(). Не уверенный. Попробуйте их обоих.
Comments