在input隐藏字段中存储返回json值

我想知道是否有可能将返回的json存储在隐藏的input字段中。 例如,这是我的JSON返回:

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

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

例如:我有这样的东西:

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

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

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

您可以将其存储在隐藏字段中,或将其存储在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 

编辑:创build此页面: http : //jsfiddle.net/GNyQn/来演示上述。 这个例子假定你已经在数组中正确地返回了你的命名string值,并且只需要根据OP问题来存储它。 在这个例子中,我也把第一个数组的值(每个OP例子)作为文本放到一个div中。

我不知道为什么这被认为是“复杂”,因为我没有看到在这个数组中处理这些string的简单方法。

虽然我已经看到了build议的方法使用和工作,我认为设置隐藏字段的值只使用JSON.stringify打破了HTML …

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

 <input type="hidden" value="{"name":"John"}"> 

正如你可以看到,在开放的链式支架可以被一些浏览器解释为第一个双引号:

 <input type="hidden" value="{" rubbish > 

所以为了更好的方法,我build议使用encodeURIComponent函数。 再加上JSON.stringify,我们可以推出如下的东西:

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

现在该值可以安全地存储在input隐藏types中,如下所示:

 <input type="hidden" value="%7B%22name%22%3A%22John%22%7D"> 

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

 <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"} 

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

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

如果您使用JSON序列化程序 ,则可以简单地以string格式存储您的对象

 myHiddenText.value = JSON.stringify( myObject ); 

然后你可以拿回来的价值

 myObject = JSON.parse( myHiddenText.value ); 

然而,如果你不打算在页面提交中传递这个值,那么对你来说可能会更容易一些,如果你把它作为一个全局的javascriptvariables放在一边,你将会节省很多的序列化。

它看起来像返回值是在一个数组? 这有点奇怪…还要注意,某些浏览器将允许从跨域请求中parsing(当您拥有顶级JSON对象时,这不是真的)。

无论如何,如果这是一个数组包装,你会想这样的事情:

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

稍后可以通过在同一个字段上进行简单的.val()调用来检索它。 这老实说,看起来有点奇怪。 隐藏的字段不会持续在页面请求中,那么为什么不把它放在自己的(伪名称空间)值桶中呢? 例如,

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

这将使您可以从任何地方使用,而不需要任何hacky的input字段pipe理。 对于简单的值存储来说,这也比DOM修改更有效率。

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

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

还是我想念什么?