store在输入隐藏字段中返回json值

her*_*rsh 47 javascript jquery json

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

[{"id":"15aea3fa","firstname":"John","lastname":"Doe"}]
Run Code Online (Sandbox Code Playgroud)

我想将id存储在隐藏字段中,以便稍后可以引用它来执行某些操作.

示例:我有这样的事情:

<input id="HiddenForId" type="hidden" value="" />
Run Code Online (Sandbox Code Playgroud)

并希望jquery稍后将值返回给我:

var scheduletimeid = $('#HiddenForId').val();
Run Code Online (Sandbox Code Playgroud)

rod*_*odu 133

虽然我已经看到了使用和工作的建议方法,但我认为仅使用JSON.stringify设置隐藏字段的值会破坏HTML ...

在这里,我将解释我的意思:

<input type="hidden" value="{"name":"John"}">
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,开放链括号之后的第一个双引号可能会被某些浏览器解释为:

<input type="hidden" value="{" rubbish >
Run Code Online (Sandbox Code Playgroud)

因此,为了更好地解决这个问题,我建议使用encodeURIComponent函数.与JSON.stringify一起,我们分享如下内容:

> encodeURIComponent(JSON.stringify({"name":"John"}))
> "%7B%22name%22%3A%22John%22%7D"
Run Code Online (Sandbox Code Playgroud)

现在该值可以安全地存储在输入隐藏类型中,如下所示:

<input type="hidden" value="%7B%22name%22%3A%22John%22%7D">
Run Code Online (Sandbox Code Playgroud)

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

<div id="something" data-json="%7B%22name%22%3A%22John%22%7D"></div>
Run Code Online (Sandbox Code Playgroud)

现在要读取数据,我们可以做类似的事情:

> var data = JSON.parse(decodeURIComponent(div.getAttribute("data-json")))
> console.log(data)
> Object {name: "John"}
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要在POST表单中返回复杂对象,这是唯一可用的方法.这应该是公认的答案(因为大多数搜索和发现这个问题的人都想要做到这一点). (13认同)
  • 哇,最好的解决方案我在JSON.stringify上遇到了2个小时的问题,然后我发现了这个令人讨厌的答案。谢谢。 (2认同)

Mic*_*Mic 20

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

JSON对象是可在现代的浏览器,也可以从使用json2.js库json.org


Mar*_*iss 19

您可以将其存储在隐藏字段中,或将其存储在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
Run Code Online (Sandbox Code Playgroud)

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

我不确定为什么这被视为"复杂",因为我看不到在这个数组中处理这些字符串的简单方法.

  • 我投了票,因为它太复杂了. (3认同)

Dav*_*und 13

如果使用JSON Serializer,则只需将对象以字符串格式存储即可

myHiddenText.value = JSON.stringify( myObject );
Run Code Online (Sandbox Code Playgroud)

然后,您可以返回值

myObject = JSON.parse( myHiddenText.value );
Run Code Online (Sandbox Code Playgroud)

但是,如果您不打算在页面提交中传递此值,那么对您来说可能更容易,并且如果您将其作为全局javascript变量丢弃,则可以节省大量序列化.