JQuery массивы в cookie - PullRequest
       5

JQuery массивы в cookie

1 голос
/ 21 июня 2011
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?

Спасибо и привет, Алекс

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Если 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 должны иметь только числовые ключи. Для всего остального используйте простые объекты.

1 голос
/ 21 июня 2011

Сериализация требуется перед хранением, поскольку cookie может быть только строкой.Тем не менее, есть библиотеки JS / jQ cookie, которые пытаются прозрачно обработать un / serialization для вас.Самая популярная библиотека cookie, которую люди используют с jQuery (та, которую вы используете), не пытается справиться с этим для вас, поэтому требуется ваш дополнительный шаг.

Редактировать: Ах, япропущена часть вопроса о сериализации, не приводящая к правильному значению.См. Ответ Феликса Клинга , он правильный.

...