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

时间:2010-08-10 12:20:44

标签: javascript jquery json

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

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

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

示例:我有这样的事情:

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

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

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

6 个答案:

答案 0 :(得分:129)

虽然我已经看到了建议使用和使用的方法,但我认为仅使用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"}

答案 1 :(得分:20)

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

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

答案 2 :(得分: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

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

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

答案 3 :(得分:12)

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

即可
myHiddenText.value = JSON.stringify( myObject );

然后您可以使用

获取值
myObject = JSON.parse( myHiddenText.value );

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

答案 4 :(得分:0)

看起来返回值在数组中?这有点奇怪......而且还要注意某些浏览器会允许从跨域请求中解析(当你有一个顶级JSON对象时,这是不正确的。)

无论如何,如果那是一个数组包装器,你会想要这样的东西:

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

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

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

这将使您可以从任何地方使用它,而无需任何hacky输入字段管理。它比为简单的值存储进行DOM修改效率更高。

答案 5 :(得分:-1)

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

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

还是我错过了什么?