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 /jQcookieライブラリが利用可能です。人々がjQueryで使用する最も人気のあるCookieライブラリ(使用しているもの)はこれを処理しようとしないため、追加の手順が必要です。

編集:ああ、シリアル化に関する質問の一部を見逃してしまい、正しい値が得られませんでした。フェリックス・クリングの答えを見てください、それは正しいです。

于 2011-06-21T13:37:19.903 に答える