【发布时间】:2014-07-15 00:11:10
【问题描述】:
我知道有很多关于这方面的问题,但我尝试了几种不同的建议解决方案,并且每种解决方案都得到了相同的结果。
我将复选框值以timeArr = [ event-name-one: 0: 1404915600, 1: 1404917400 ] 的格式存储在一个数组中。当数组使用新的键/值对更新时,会更新一个 cookie,该 cookie 将数组存储为 JSON 对象。
我使用jQuery.cookie('day', JSON.stringify(timeArr), {expires: 7}); 将JSON 对象存储在cookie 中,它以以下格式存储数组(从console.log(); 返回):
{"event-name-one":{"0":1405346400,"1":1405347600},"event-name-two":{"0":1405357200,"1":1405358400}}
在这种情况下,event-name-one 和 event-name-two 是复选框的 ID。我需要遍历返回的 cookie 值(JSON 对象)并检查在返回的 cookie 中找到谁的 ID 的复选框。
我尝试了几个不同的循环,即for(var k in cookieValue){} 和jQuery.each(jQuery.parseJSON(cookieValue), function(i, v) {});,但都没有成功。
for(var k in cookieValue) 循环分别返回对象的每个字母,jQuery.each() 循环返回此错误:Cannot use 'in' operator to search for '76' in ...
如何将此 JSON 字符串转换回数组,以便循环遍历它并获取“键”
【问题讨论】:
-
你能提供一个jsfiddle吗?我无法重现该问题。我尝试了
var json = '{"event-name-one":{"0":1405346400,"1":1405347600},"event-name-two":{"0":1405357200,"1":1405358400}}'; jQuery.each(jQuery.parseJSON(json), function(i, v) { console.log(i, v); });,它记录了以下内容:event-name-one Object {0: 1405346400, 1: 1405347600}和event-name-two Object {0: 1405357200, 1: 1405358400} -
不幸的是,我无法在 Fiddle 中重现该问题。当我将相同的代码放在小提琴中时,它似乎可以正确返回,但是当我的服务器上有完全相同的东西时,它会返回
Uncaught TypeError: Cannot use 'in' operator to search for '109' in {"event-name-one":{"0":"1405346400","1":"1405347600"}}当我复制并粘贴您的确切 JSON 字符串和上面的$.each()函数时,我得到一个Unexpected Token错误 -
我不会为此使用 cookie - 我会使用 localStorage。
-
这表明你传入
jQuery.each的不是对象而是字符串。 -
@Andy 我不能使用本地存储,因为它必须与 IE8 兼容。我找到了答案并发布了。
标签: javascript jquery arrays json cookies