22

私はJavaScriptオブジェクトのリストを持っています:

var people = [
   { 'name' : 'Abel', 'age' : 1 },
   { 'name' : 'Bella', 'age' : 2 },
   { 'name' : 'Chad', 'age' : 3 },
]

jQuery $.cookie() を使用してブラウザの Cookie に保存しようとしました。

$.cookie("people", people);

次に、この Cookie を取得して、別のオブジェクトをプッシュしようとします。

var people = $.cookie("people");
people.push(
    { 'name' : 'Daniel', 'age' : 4 }
);

ただし、これは機能しません。このコードを Firebug で分析したところ、コンソールはそれpeopleが文字列 ( "[object Object],[object Object],[object Object]") であり、プッシュ機能が存在しないことに気付きました。

何が起こっている?オブジェクトのリストを保存および取得する適切な方法は何ですか?

4

2 に答える 2

34

Cookie は文字列のみを保存できます。したがって、オブジェクトの配列を JSON 文字列に変換する必要があります。JSON ライブラリがある場合は、それを使用しJSON.stringify(people)て Cookie に保存し、それを使用$.parseJSON(people)して文字列化を解除できます。

最終的に、コードは次のようになります。

var people = [
   { 'name' : 'Abel', 'age' : 1 },
   { 'name' : 'Bella', 'age' : 2 },
   { 'name' : 'Chad', 'age' : 3 },
];
$.cookie("people", JSON.stringify(people));
// later on...
var people = $.parseJSON($.cookie("people"));
people.push(
    { 'name' : 'Daniel', 'age' : 4 }
);
$.cookie("people", JSON.stringify(people));
于 2012-01-27T21:12:45.393 に答える
7

今日これを試みましたが、うまくいきませんでした。後で、Cookie に保存しようとした 3 つの非常に大きなオブジェクトがあったことが原因であることがわかりました。

これを回避する方法は、ブラウザのローカル ストレージに情報を保存することでした。

例:

localStorage.setItem("test2", JSON.stringify(obj) )

localStorage.getItem("test2")

ローカル ストレージに関する詳細情報: Cookie とローカル ストレージの比較

これに 4 時間費やしましたが、同じ過ちを犯さないでください。

于 2015-08-20T14:48:31.023 に答える