jqueryはjsonデータオブジェクトをcookieに保存します


108

JSONデータをCookieに保存するにはどうすればよいですか?

私のJSONデータは次のようになります

$("#ArticlesHolder").data('15', {name:'testname', nr:'4',price:'400'});
$("#ArticlesHolder").data('25', {name:'name2', nr:'1', price:'100'});
$("#ArticlesHolder").data('37', {name:'name3', nr:'14', price:'60'});

そして、私は何かをしたいです

var dataStore = $.cookie("basket-data", $("#ArticlesHolder").data());

そして、それを$("#ArticlesHolder")好きなようにロードしたいデータを取得する

$.each($.cookie("basket-data"), function(i,e){
 $("#ArticlesHolder").data(i, e);
});

誰かが私が正しい軌道に乗っているかどうかを知っていますか、これを他の方法で行う必要がありますか?簡単に言うと、Cookieからjsonデータをどのようにしてプルするのですか?


8
単純なことですが、質問に「JSONデータ」はありません。オブジェクトリテラル表記で定義したJavaScriptオブジェクトがいくつかあります(JSONではなく、JSONはオブジェクトリテラル表記のサブセットです)が、そこにはJSONがありません。json.orgただし、オブジェクトをcookie文字列に格納するためのデータ形式としてJSON を使用することはほぼ確実です。
TJクラウダー2010年

回答:


195

次のように、データをJSONとしてシリアル化できます。

$.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

次に、それをCookieから取得します。

$("#ArticlesHolder").data(JSON.parse($.cookie("basket-data")));

これは、データオブジェクトに依存しJSON.stringify()JSON.parse()データオブジェクトをシリアル化/逆シリアル化します。古いブラウザー(IE <8)ではJSON機能を取得するためにjson2.jsが含まれています。この例では、jQuery cookieプラグインを使用します


2
古代から、JSONはOperaのCookieで許可されていませんmy.opera.com/community/forums/…私にもこのエラーがあります。@ cookie @プラグインが@ encodeURIComponent @を使用している場合でも、pbugは表示されません。
キリルイド2013年

1
この質問と答えcookieは、それがjQueryに組み込まれた関数であると私に思わせました。そうではないようです。それとも非推奨ですか?それが私が見つけたプラグインである場合、それにリンクすることは混乱を避けるために素晴らしいでしょう...
TJ

1
@TJそれは確かにプラグイン、jQuery cookieプラグインです。あなたはそれをここで見つけることができます:plugins.jquery.com/cookieなぜそれがこの時点でコアにないのか私は本当に不思議に思っています...
Nick Craver

一部のブラウザでこれを使用する場合は注意してください。,(カンマ)文字は、クッキーはSafariやその他のブラウザの中に正しく設定されない場合があります。
Matt Seymour

jQueryが不要な場合は、この優れた軽量Cookieライブラリを使用することもできます。[ developer.mozilla.org/en-US/docs/Web/API/document/cookie] lib
RyBolt

40

現在、JSON.stringify明示的に使用する必要はすでにありません。このコード行を実行するだけです

$.cookie.json = true;

その後、任意のオブジェクトをCookieに保存できます。Cookieを読み取ると、オブジェクトは自動的にJSONに変換され、JSONから戻されます。

var user = { name: "name", age: 25 }
$.cookie('user', user);
...

var currentUser = $.cookie('user');
alert('User name is ' + currentUser.name);

ただし、JSONライブラリにはjquery.cookieが付属していないため、自分でダウンロードし、jquery.cookie.jsの前にhtmlページに含める必要があります。


3
$ .cookie.json = trueなしでこのアプローチを試し、[object object]をcookie値として取得しました。次に、それをtrueに設定し、オブジェクトを直接Cookieに渡そうとしましたが、Cookieは入力されませんでした。
JacobRossDev 2013

@ jacobross85古いバージョンのjquery.cookie.jsを使用している可能性があると思います。ソースコードを確認してください。間違ったファイルがアクティブな場合があります。
デクスター2015年

これにより、Cookieが普遍的にJSONとして扱われることに注意してください。その結果、盲目的に追加$cookie.json = trueすると、他のCookieと競合する可能性があります。したがって、すでに他の場所でCookieを使用しているプロジェクトでこれを使用する場合は注意してください。
エリックTjossem

複雑なjsonの解決策はありますか?私はいくつかの属性は、JSONと....が含まれている私のJSONでJSON配列持つ
nasim jahednia

7

JSON.stringify(userData)jsonオブジェクトを文字列に変換するために使用します。

var dataStore = $.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

そしてクッキーの使用から戻るため JSON.parse()

var data=JSON.parse($.cookie("basket-data"))

4

から返された値をJSON.stringify(userData)Cookie に保存することはお勧めしません。一部のブラウザでバグが発生する可能性があります。

使用する前に、base64に変換し(を使用btoa)、それを読み取るときにbase64から変換する必要があります(を使用atob)。

val = JSON.stringify(userData)
val = btoa(val)

write_cookie(val)

3
これに問題のあるブラウザへの参照がありますか?
Marthin

1
私はdjangoプラットフォームのChromeでcookieとしてjsonのリストを使用します。それにはいくつかの問題があります。また、Cookieによって渡された実際のデータをユーザーから非表示にする方が常に良い
Eyal Ch

1
サーバー側では、Pythonの標準Cookie処理により、{またはを含むCookieが}拒否され、拒否されたCookieに続くCookieヘッダー内のCookieはすべて静かにドロップされます。
snakecharmerb

2

JSONとBase64としてデータをシリアル化すると、依存関係jquery.cookie.js:

var putCookieObj = function(key, value) {
    $.cookie(key, btoa(JSON.stringify(value)));
}

var getCookieObj = function (key) {
    var cookie = $.cookie(key);
    if (typeof cookie === "undefined") return null;
    return JSON.parse(atob(cookie));
}

:)


0

これを試してください:https : //github.com/tantau-horia/jquery-SuperCookie

クイック使用:

create-cookieを作成する

チェック-存在をチェック

verify-JSONの場合、Cookie値を検証します

check_index-JSONにインデックスが存在するかどうかを確認します

read_values-Cookie値を文字列として読み取ります

read_JSON-Cookie値をJSONオブジェクトとして読み取る

read_value-JSONオブジェクトに格納されたインデックスの値を読み取ります

replace_value-JSONオブジェクトに格納されている指定されたインデックスの値を置き換えます

remove_value-JSONオブジェクトに保存されている値とインデックスを削除します

ただ使用する:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_json("name_of_the_cookie");
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.