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

Вернуть значение json в хранилище в скрытом поле ввода

Мне было интересно, можно ли сохранить возвращаемый json в скрытом поле ввода. Например, это возвращает мой json:

[{"id":"15aea3fa","firstname":"John","lastname":"Doe"}]

Я хотел бы просто сохранить идентификатор в скрытом поле, чтобы впоследствии ссылаться на него, чтобы что-то сделать с ним.

Пример: У меня есть что-то вроде этого:

<input id="HiddenForId" type="hidden" value="" />

и хотел бы, чтобы jquery возвращал значение позже мне так:

var scheduletimeid = $('#HiddenForId').val();
4b9b3361

Ответ 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';

или мне что-то не хватает?