jquery speichere json-Datenobjekt im Cookie

108

Wie speichere ich JSON-Daten in einem Cookie?

Meine JSON-Daten sehen so aus

$("#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'});

Und ich möchte so etwas tun

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

und um die Daten abzurufen, möchte ich sie in $("#ArticlesHolder")like laden

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

Weiß jemand, ob ich auf dem richtigen Weg bin oder sollte dies auf andere Weise geschehen? Einfach ausgedrückt, wie kann ich JSON-Daten aus einem Cookie ablegen?

Marthin
quelle
8
Nur pedantisch sein, aber Ihre Frage enthält keine "JSON-Daten". Sie haben einige JavaScript-Objekte, die Sie über die Objektliteralnotation definiert haben (nicht JSON, JSON ist eine Teilmenge der Objektliteralnotation), aber dort ist kein JSON vorhanden. json.org Sie wollen an Sicherheit grenzender Wahrscheinlichkeit verwenden JSON als Datenformat für Ihre Objekte in dem Cookie - Zeichenfolge zu speichern, though.
TJ Crowder

Antworten:

195

Sie können die Daten wie folgt als JSON serialisieren:

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

Dann, um es aus dem Cookie zu bekommen:

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

Dies basiert auf JSON.stringify()undJSON.parse() zum Serialisieren / Deserialisieren Ihres Datenobjekts. Ältere Browser (IE <8) enthalten json2.js , um die JSONFunktionalität zu erhalten. In diesem Beispiel wird das jQuery-Cookie-Plugin verwendet

Nick Craver
quelle
2
JSON ist in Cookies für Opera seit der Antike nicht mehr zulässig. My.opera.com/community/forums/… Ich habe auch diesen Fehler. Auch wenn @ cookie @ plugin @ encodeURIComponent @ verwendet, sollte pbug nicht angezeigt werden.
Kirilloid
1
Diese Frage und Antwort lässt mich glauben, dass dies cookieeine in jQuery integrierte Funktion ist. Es scheint nicht zu sein. oder ist es veraltet ..? Wenn es die Plugins sind, die ich finde, wäre es großartig, darauf zu verlinken, um die Verwirrung zu vermeiden ...
TJ
1
@TJ Es ist in der Tat ein Plugin, das jQuery-Cookie-Plugin. Sie finden es hier: plugins.jquery.com/cookie Ich frage mich wirklich, warum es zu diesem Zeitpunkt nicht im Kern ist ...
Nick Craver
Seien Sie vorsichtig, wenn Sie dies in einigen Browsern verwenden. Das ,(Komma-) Zeichen kann dazu führen, dass die Cookies in Safari und anderen Browsern nicht richtig gesetzt werden.
Matt Seymour
Sie können diese großartige, leichte Cookie-Bibliothek auch verwenden, wenn jQuery nicht gewünscht wird. [ developer.mozilla.org/en-US/docs/Web/API/document/cookie] lib
RyBolt
40

Jetzt besteht keine Notwendigkeit mehr, JSON.stringifyexplizit zu verwenden . Führen Sie einfach diese Codezeile aus

$.cookie.json = true;

Danach können Sie jedes Objekt in einem Cookie speichern, das beim Lesen des Cookies automatisch in JSON und zurück von JSON konvertiert wird.

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

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

Die JSON-Bibliothek wird jedoch nicht mit jquery.cookie geliefert. Sie müssen sie daher selbst herunterladen und vor jquery.cookie.js in die HTML-Seite aufnehmen

Vitalii Korsakov
quelle
3
Ich habe diesen Ansatz ohne $ .cookie.json = true ausprobiert und [Objektobjekt] als Cookie-Wert erhalten. Setzen Sie es dann auf true und versuchen Sie, das Objekt direkt an das Cookie zu übergeben, und es wurde kein Cookie ausgefüllt.
JacobRossDev
@ jacobross85 Ich denke, es ist möglich, dass einige von uns eine ältere Version von jquery.cookie.js verwenden. Bitte überprüfen Sie den Quellcode. Manchmal ist die falsche Datei aktiv.
Dexter
Bitte beachten Sie, dass Cookies dadurch allgemein als JSON behandelt werden. Infolgedessen kann das blinde Hinzufügen $cookie.json = truezu Konflikten mit Ihren anderen Cookies führen. Seien Sie also vorsichtig bei einem Projekt, das bereits an anderer Stelle Cookies verwendet!
Eric Tjossem
Haben Sie eine Lösung für komplexe JSON? Ich habe ein JSON-Array in meinem JSON, das einige Attribute enthält JSON und ...
Nasim Jahednia
7

Verwenden Sie JSON.stringify(userData)diese Option, um ein JSON-Objekt in eine Zeichenfolge umzuwandeln.

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

und für die Rückkehr von der Verwendung von Cookies JSON.parse()

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

Es wird nicht empfohlen, den zurückgegebenen Wert JSON.stringify(userData)in einem Cookie zu speichern . In einigen Browsern kann dies zu einem Fehler führen.

Bevor Sie es verwenden, sollten Sie es in base64 (using btoa) konvertieren und beim Lesen von base64 (using atob) konvertieren .

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

write_cookie(val)
Eyal Ch
quelle
3
Haben Sie einen Verweis auf einen Browser, der Probleme damit hat?
Marthin
1
Ich benutze eine Liste von Jsons als Cookie auf Chrom auf der Django-Plattform. es hat einige Probleme. Außerdem ist es immer besser, die vom Cookie übergebenen Daten vor dem Benutzer zu verbergen
Eyal Ch
1
Auf der Serverseite lehnt die Standard-Cookie-Behandlung von Python Cookies ab, die {oder enthalten }, und löscht alle Cookies, die dem abgelehnten Cookie folgen, im Cookie-Header.
Snakecharmerb
2

Wenn Sie die Daten als JSON und Base64 serialisieren, ist die Abhängigkeit 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));
}

:) :)

Asimov
quelle
0

Versuchen Sie dies: https://github.com/tantau-horia/jquery-SuperCookie

Schnelle Verwendung:

erstellen - Cookie erstellen

check - Existenz prüfen

verify - Überprüfen Sie den Cookie-Wert bei JSON

check_index - Überprüfen Sie, ob der Index in JSON vorhanden ist

read_values ​​- Cookie-Wert als Zeichenfolge lesen

read_JSON - Cookie-Wert als JSON-Objekt lesen

read_value - Lesewert des im JSON-Objekt gespeicherten Index

replace_value - Ersetzt den Wert eines angegebenen Index, der im JSON-Objekt gespeichert ist

remove_value - entfernt den im JSON-Objekt gespeicherten Wert und Index

Benutz einfach:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_json("name_of_the_cookie");
uzername_not_found
quelle