Хотя я видел предложенные методы, которые использовались и работают, я думаю, что установка значения скрытого поля только с помощью JSON.stringify нарушает HTML ...
Здесь я объясню, что я имею в виду:
<input type="hidden" value="{"name":"John"}">
Как вы можете видеть, первые двойные кавычки после того, как скобки с открытой цепью могли интерпретироваться некоторыми браузерами как:
<input type="hidden" value="{" rubbish >
Так что для лучшего подхода к этому я бы предложилиспользовать функцию encodeURIComponent .Вместе с JSON.stringify у нас должно быть что-то вроде следующего:
> encodeURIComponent(JSON.stringify({"name":"John"}))
> "%7B%22name%22%3A%22John%22%7D"
Теперь это значение можно безопасно сохранить во входном скрытом типе, например:
<input type="hidden" value="%7B%22name%22%3A%22John%22%7D">
или (дажелучше) используя атрибут data элемента HTML, управляемого скриптом, который будет использовать данные, например:
<div id="something" data-json="%7B%22name%22%3A%22John%22%7D"></div>
Теперь, чтобы прочитать данные обратно, мы можем сделать что-то вроде:
> var data = JSON.parse(decodeURIComponent(div.getAttribute("data-json")))
> console.log(data)
> Object {name: "John"}