Подтвердить что ты не робот

Как я могу прочитать JSON в script -tag из 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:")
})
4b9b3361

Ответ 1

Я бы изменил объявление script на это:

<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>

Поля типа и идентификатора. После этого

var data = JSON.parse(document.getElementById('data').innerHTML);

будет работать отлично во всех браузерах.

type="application/json" необходим для предотвращения разбора браузера во время загрузки.

Ответ 2

Я закончил тем, что этот код JavaScript не зависит от jQuery.

var json = document.getElementsByTagName('script');
var myObject = JSON.parse(json[json.length-1].textContent);

Ответ 3

JSON.parse($('script[src="mysript.js"]').html());

или придумайте какой-либо другой метод для идентификации script.

Возможно, вместо .html() вам может понадобиться .text(). Не уверен. Попробуйте их обоих.

Ответ 4

Чтобы прочитать 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

Вы также можете использовать методы для указания на script как 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>