1
var adddata = [];
adddata[ group ] = [];
adddata[ group ][ id ] = option; // option is an object like { foo : 'bar' }

console.log( adddata ); // looks ok

$.cookie( 'cookiename', JSON.stringify( adddata ) );
console.log( $.cookie( 'cookiename' ) ); // just "[]"
$.cookie( 'cookiename', adddata );
console.log( $.cookie( 'cookiename' ) ); // "an empty string"

// in another file
var cdata = JSON.parse( $.cookie( 'cookiename' ) );
$.each( cdata, function( group, items ){
    /* and so on */
});

如您所见,我使用 $.cookie 插件。但是我怎样才能以正确的方式将数组存储到 cookie 中呢?

谢谢和问候,亚历克斯

4

2 回答 2

4

如果group并且id不是数值,JSON.stringify将忽略它们。将数组转换为 JSON 时,仅考虑数字属性。

看:

> a = []
  []
> a['foo'] = 5
  5
> a[0] = 42
  42
> JSON.stringify(a)
  "[42]"

如果您处理非数字属性,则必须使用对象: {}

> a = {}
  Object
> a['foo'] = 5
  5
> JSON.stringify(a)
  "{"foo":5}"

永远不要将 JavaScript数组用作关联数组。JS 数组应该只有数字键。对于其他一切,使用普通对象。

于 2011-06-21T13:47:00.593 回答
1

存储前需要序列化,因为 cookie 只能是字符串。但是,有 JS/jQ cookie 库可以尝试为您透明地处理取消/序列化。人们与 jQuery 一起使用的最流行的 cookie 库(您正在使用的那个)不会尝试为您处理此问题,因此需要您执行额外的步骤。

编辑:啊,我错过了关于序列化没有产生正确值的部分问题。请参阅Felix Kling的回答,这是正确的。

于 2011-06-21T13:37:19.903 回答