当天的尖叫 - Javascript以不同的方式序列化阵列

时间:2009-09-24 15:03:46

标签: javascript jquery cookies

目前这让我非常讨厌:

考虑一个包含2个值的数组:

var myArray = new Array();
myArray.push(21031);
myArray.push(21486);

使用jquery和toJSON将其存储在cookie中时,cookie的值如下所示:

["21031","21486"]

现在考虑一个单值的数组:

var myArray = new Array();
myArray.push(21239);

使用jquery和toJSON将其存储在cookie中时,cookie的值如下所示:

21239

这对我来说几乎完全没用,因为当我从cookie中提取项目时,一个回来作为单个值,另一个回来作为一个我可以迭代的数组....啊啊!

为什么?

3 个答案:

答案 0 :(得分:3)

我建议使用json2.js' JSON.stringify。这两种情况都是正确的:

// [] is the same as new Array();
var foo = [];

foo.push(1);
foo.push(2);

JSON.stringify(foo); // "[1, 2]"

var bar = [];

bar.push(1);

JSON.stringify(bar); // "[1]"

此外,当您使用json2.js API时,您的代码会自动利用新浏览器中的浏览器本机功能。

答案 1 :(得分:1)

你做错了什么。无论你使用什么JSON lib(假设它确实有效),序列化:

[21031, 21486]

应该产生这个:

"[21031,21486]"

您发布的不是["21031","21486"]。这看起来像是在序列化各个元素。发布更多代码。

答案 2 :(得分:0)

Cookies是字符串,所以你要做的就是存储数组的字符串序列化。如果我这样做:

document.cookie = [1, 2].toString()

然后document.cookie的值为“1,2”,这不是数组。

编辑:因为toJSON不是一个原生的jQuery方法,它可能来自一个插件。你检查过插件文档了吗?或者,尝试使用其他预期的插件。