我想知道是否可以将返回json存储在隐藏的输入字段中。例如,这是我的json返回的内容:
[{"id":"15aea3fa","firstname":"John","lastname":"Doe"}]
我想将id存储在隐藏字段中,以便稍后可以引用它来执行某些操作。
示例:我有这样的事情:
<input id="HiddenForId" type="hidden" value="" />
并希望jquery稍后将值返回给我:
var scheduletimeid = $('#HiddenForId').val();
答案 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';
还是我错过了什么?