Как я могу прочитать 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:")
})
512   4  

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

    Ничего не найдено.