web-dev-qa-db-ja.com

オブジェクトの配列をjQuery $ .cookie()を使用してCookieに保存するにはどうすればよいですか?

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

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

私はjQuery $ .cookie()を使用してブラウザのCookieにそれらを保存しようとしました:

$.cookie("people", people);

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

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

ただし、これは機能しません。私はこのコードをFirebugで分析し、コンソールはpeopleが文字列("[object Object],[object Object],[object Object]")そして、プッシュ機能が存在しなかったこと。

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

20

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));
33
Kevin B

今日これを試してみましたが、うまく機能しませんでした。後で私はそれが私がクッキーに保存しようとした3つの非常に大きなオブジェクトを持っているためであることがわかった。

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

例:

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

localStorage.getItem("test2")

ローカルストレージに関する詳細情報: cookies vs local storage

私の時間の4時間はこれにベントします。同じ間違いをしないでください。

7
ThunD3eR