javascript-将返回的json值存储在输入隐藏字段中

我想知道是否可以将return json存储在隐藏的输入字段中。 例如,这是我的json返回的内容:

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

我只想将ID存储在一个隐藏的字段中,以便以后可以引用它来做一些事情。

示例:我有这样的事情:

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

并希望jquery稍后将值返回给我,如下所示:

var scheduletimeid = $('#HiddenForId').val();
hersh asked 2020-02-22T00:14:06Z
6个解决方案
131 votes

尽管我已经看到了建议的方法并可以使用,但我认为仅使用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">

或(甚至更好)使用由将消耗数据的脚本操纵的HTML元素的data-属性,例如:

<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"}
rodu answered 2020-02-22T00:15:27Z
20 votes

您可以使用input.value = JSON.stringify(obj)将对象转换为字符串。
当您需要它时,可以使用obj = JSON.parse(input.value)

JSON对象在现代浏览器中可用,或者您可以使用json.org中的json2.js库

Mic answered 2020-02-22T00:15:55Z
19 votes

您可以将其存储在隐藏字段中,也可以将其存储在javascript对象中(我的偏爱),因为可能的访问方式是通过javascript。

注意:由于您有一个数组,因此对于第一个元素,它将作为myvariable[0]访问(如您所愿)。

编辑显示示例:

clip...
            success: function(msg)
            {
                LoadProviders(msg);
            },
...

var myvariable ="";

function LoadProviders(jdata)
{
  myvariable = jdata;
};
alert(myvariable[0].id);// shows "15aea3fa" in the alert

编辑:创建了此页面:[http://jsfiddle.net/GNyQn/]来演示以上内容。 本示例假设您已经在数组中正确返回了命名的字符串值,并且只需要针对每个OP问题存储它即可。 在示例中,我还将返回的第一个数组的值(每个OP示例)作为文本放入div中。

我不确定为什么将其视为“复杂的”,因为我发现没有更简单的方法来处理此数组中的这些字符串。

Mark Schultheiss answered 2020-02-22T00:14:40Z
13 votes

如果您使用JSON序列化器,则可以像这样简单地以字符串格式存储对象

myHiddenText.value = JSON.stringify( myObject );

然后,您可以使用

myObject = JSON.parse( myHiddenText.value );

但是,如果您不打算在页面提交之间传递此值,那么对您来说可能会更容易,并且只要将其作为全局javascript变量使用,就可以节省很多序列化。

David Hedlund answered 2020-02-22T00:16:24Z
0 votes

看起来返回值在数组中吗? 这有点奇怪...并且还请注意,某些浏览器将允许从跨域请求中解析该请求(当您拥有顶级JSON对象时,情况并非如此)。

无论如何,如果这是一个数组包装器,您将需要这样的东西:

$('#my-hidden-field').val(theObject[0].id);

您以后可以通过对同一字段进行简单的.val()调用来检索它。 老实说,这看起来有些奇怪。 隐藏字段不会在页面请求中持久存在,那么为什么不将其保留在自己的(伪命名空间)值存储桶中? 例如。,

$MyNamespace = $MyNamespace || {};
$MyNamespace.myKey = theObject;

这样一来,您便可以在任何地方使用它,而无需进行任何恶意的输入字段管理。 它比简单的值存储进行DOM修改要有效得多。

jmar777 answered 2020-02-22T00:16:58Z
-1 votes

只需使用javascript设置隐藏字段:

document.getElementById('elementId').value = 'whatever';

还是我想念什么?

JohnSmith answered 2020-02-22T00:17:23Z
translate from https://stackoverflow.com:/questions/3448831/store-return-json-value-in-input-hidden-field