Вернуть значение json в хранилище в скрытом поле ввода
Мне было интересно, можно ли сохранить возвращаемый json в скрытом поле ввода. Например, это возвращает мой json:
[{"id":"15aea3fa","firstname":"John","lastname":"Doe"}]
Я хотел бы просто сохранить идентификатор в скрытом поле, чтобы впоследствии ссылаться на него, чтобы что-то сделать с ним.
Пример: У меня есть что-то вроде этого:
<input id="HiddenForId" type="hidden" value="" />
и хотел бы, чтобы jquery возвращал значение позже мне так:
var scheduletimeid = $('#HiddenForId').val();
Ответы
Ответ 1
Вы можете сохранить его в скрытом поле, или сохранить его в объекте javascript (мои предпочтения), поскольку вероятный доступ будет через javascript.
ПРИМЕЧАНИЕ. Поскольку у вас есть массив, тогда для него будет доступен myvariable[0]
для первого элемента (как у вас есть).
Пример показа EDIT:
clip...
success: function(msg)
{
LoadProviders(msg);
},
...
var myvariable ="";
function LoadProviders(jdata)
{
myvariable = jdata;
};
alert(myvariable[0].id);// shows "15aea3fa" in the alert
EDIT: Создала эту страницу: http://jsfiddle.net/GNyQn/, чтобы продемонстрировать это. В этом примере делается предположение, что вы уже правильно вернули свои именованные строковые значения в массиве и просто должны сохранить его в одном вопросе OP. В этом примере я также вернул значения первого массива (в примере OP) в div как текст.
Я не уверен, почему это было рассмотрено как "сложное", поскольку я не вижу более простого способа обработки этих строк в этом массиве.
Ответ 2
Хотя я видел предлагаемые методы, используемые и работающие, я думаю, что установка значения скрытого поля только с использованием 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, управляемый script, который будет потреблять данные, например:
<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"}
Ответ 3
Вы можете использовать input.value = JSON.stringify(obj)
для преобразования объекта в строку.
И когда вам это нужно, вы можете использовать obj = JSON.parse(input.value)
Объект JSON доступен в современных браузерах или вы можете использовать библиотеку json2.js из json.org
Ответ 4
Если вы используете JSON Serializer, вы можете просто сохранить свой объект в формате строки как таковой
myHiddenText.value = JSON.stringify( myObject );
Затем вы можете вернуть значение с помощью
myObject = JSON.parse( myHiddenText.value );
Однако, если вы не собираетесь передавать это значение на странице, вам может быть проще, и вы сэкономите много сериализации, если просто отбросьте его как глобальную переменную javascript.
Ответ 5
Похоже, что возвращаемое значение находится в массиве? Это несколько странно... и также имейте в виду, что некоторые браузеры позволят это разбираться из кросс-доменного запроса (что неверно, если у вас есть объект JSON верхнего уровня).
В любом случае, если это оболочка массива, вам нужно что-то вроде этого:
$('#my-hidden-field').val(theObject[0].id);
Затем вы можете получить его через простой вызов .val() в том же поле. Это, честно говоря, выглядит странно. Скрытое поле не будет сохраняться в запросах страниц, так почему бы вам просто не оставить его в своем собственном вещественном ведомом значений? Например.
$MyNamespace = $MyNamespace || {};
$MyNamespace.myKey = theObject;
Это сделает его доступным для вас из любого места, без какого-либо хакерского управления полем ввода. Это также намного эффективнее, чем модификация DOM для простого хранения значений.
Ответ 6
просто установите скрытое поле с помощью javascript:
document.getElementById('elementId').value = 'whatever';
или мне что-то не хватает?