在cookie中存储多维数组?

时间:2011-01-16 21:24:45

标签: javascript html cookies

今天我有一个Ajax解决方案,服务器跟踪选择正在进行并更新页面。我正在重做这个,所以它将在客户端上使用javascript完成,直到用户实际提交数据,性能在旧解决方案的负载下非常糟糕。 (C#,ASP.NET 4.0)

首先使用json link text

对其进行序列化,找到一种存储数组的好方法

说我有这样的数组:{Id,Value}

有任何建议我如何将上面的几个数组存储到cookie中吗?

4 个答案:

答案 0 :(得分:7)

  

说我有这样的数组:{Id,Value}

那不是阵列。那是一个对象。您可以在数组中复制多个副本:

[
    {"foo": "bar"},
    {"foo": "baz"},
    {"foo": "boom"}
]

这是包含对象的数组的有效JSON字符串 - 在这种情况下,具有单个属性foo的对象,每个属性都有自己的值,但对象不必具有具有相同的属性,并且它们可以具有多个属性。例如:

[
    {},
    ["zero", "one", "two", "three"],
    "I'm just a string",
    {
       "f0": "foo zero",
       "f1": "foo one",
       "f2": "foo two",
       "all": ["foo zero", "foo one", "foo two"]
    },
    42
]

对于包含五个条目的数组,这是一个有效的JSON字符串:

  • 没有属性的对象(例如,“空白”对象)。
  • 包含四个条目的数组。
  • 一个字符串。
  • 具有四个属性的对象:f0f1f2allf0f1f2都有字符串值; all有一个字符串数组作为值。
  • The answer生命,宇宙和万物。

您可以将对象或数组转换为有效的JSON字符串(stringify),并使用多个库中的任何一个来反转进程(解析)客户端。 Crockford(JSON的发明者)有几个his github page,最着名的是json2.js,尽管json2.js依赖于eval进行解析;因为那不是很理想,你可以使用json_parse.js(一个不使用eval的递归下降解析器)或json_parse_state.js(一个不使用eval的状态机)代替。

答案 1 :(得分:1)

使用JSON.stringify从数组对象生成一个字符串。

http://msdn.microsoft.com/en-us/library/cc836459(v=vs.85).aspx

答案 2 :(得分:1)

Cookies只存储简单的字符串。你可以想出这样的系统:

$content = [id,value];[text,textvalue];
setcookie("Array", $content);

当你想要它时,你会在分隔符处爆炸字符串(在这种情况下';'和',')

答案 3 :(得分:1)

将数组转换为字符串:

> JSON.stringify([1, 2])
*returns* '[1, 2]'

然后我们可以把它变成一个cookie:

> $.cookie('cookie', '[1, 2]')

然后解析它:

> JSON.parse($.cookie('cookie'))
*returns* [1, 2]