2011-06-21 8 views
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プラグインを使用しています。しかし、どのようにして正しい方法でクッキーに配列を格納できますか?jQuery配列をクッキーに変換

おかげ&に関して、クッキーが唯一の文字列を指定できますので、 アレックス

+0

JSON.stringify(adddata)の結果はどのように見えますか? –

+0

あなたの声明のためにちょうど[] [] – Alex

答えて

4

groupidが数値でない場合、JSON.stringifyはそれらを無視します。配列をJSONに変換するときは、数値プロパティのみが考慮されます。

参照:

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

連想配列としてのJavaScript 配列を使用しないでください:

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

はあなたが非数値的性質を扱う場合オブジェクト{}を使用する必要があります。 JS配列には数値キーのみが必要です。それ以外の場合は、プレーンオブジェクトを使用します。

+0

でデコードしてください!私の夕方を救った;) – Alex

1

シリアル化ストレージの前に必要とされます。しかし、un/serializationを透過的に処理しようとするJS/jQ cookieライブラリがあります。 jQuery(あなたが使っているもの)で使用する最も一般的なクッキーライブラリは、これを処理しないので、余分なステップが必要です。

編集:ああ、私は正しい値をもたらさないシリアル化に関する質問の一部を見逃しました。 Felix Klingの答えを参照してください、それは正しいです。

+0

ありがとうございます。私は 'var encode = $ .param(myObject);'がそれには良いと思います。 'var decode = decodeURIComponent(encode);' – Alex

関連する問題