Mit SessionStorage und LocalStorage können Schlüssel / Wert-Paare in einem Webbrowser gespeichert werden. Der Wert muss eine Zeichenfolge sein, und das Speichern von js-Objekten ist nicht trivial.
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
Heutzutage können Sie diese Einschränkung vermeiden, indem Sie Objekte in JSON serialisieren und anschließend deserialisieren, um die Objekte wiederherzustellen. Die Speicher-API durchläuft jedoch immer die Methoden setItem
und getItem
.
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D
Kann ich diese Einschränkung vermeiden?
Ich möchte nur so etwas ausführen:
sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'
Ich habe die Methoden defineGetter
und versucht defineSetter
, die Aufrufe abzufangen, aber es ist eine mühsame Aufgabe, da ich alle Eigenschaften definieren muss und mein Ziel darin besteht, die zukünftigen Eigenschaften nicht zu kennen.
javascript
session-storage
Ferran Basora
quelle
quelle
Antworten:
Sie können entweder die von der Web Storage API bereitgestellten Accessoren verwenden oder einen Wrapper / Adapter schreiben. Aus Ihrem angegebenen Problem mit defineGetter / defineSetter geht hervor, dass das Schreiben eines Wrappers / Adapters zu viel Arbeit für Sie ist.
Ich weiß ehrlich gesagt nicht, was ich dir sagen soll. Vielleicht könnten Sie Ihre Meinung zu einer "lächerlichen Einschränkung" neu bewerten. Die Web Storage API ist genau das, was sie sein soll, ein Schlüssel- / Wertspeicher.
quelle
Könnten Sie Ihr Objekt nicht "stringifizieren" ... dann verwenden
sessionStorage.setItem()
, um diese String-Darstellung Ihres Objekts zu speichern ... dann, wenn Sie es brauchen,sessionStorage.getItem()
und dann verwenden$.parseJSON()
, um es wieder herauszuholen?Arbeitsbeispiel http://jsfiddle.net/pKXMa/
quelle
Die Lösung besteht darin, das Objekt zu stringifizieren, bevor setItem im sessionStorage aufgerufen wird.
quelle
Dies ist eine dynamische Lösung, die mit allen Werttypen einschließlich Objekten funktioniert:
Dann :
quelle
Anwendungsfall:
API
quelle
if (typeof (Storage) !== "undefined"){ /* browser supports it */ }
Der Sitzungsspeicher kann kein beliebiges Objekt unterstützen, da er möglicherweise Funktionsliterale (Leseverschlüsse) enthält, die nach einem erneuten Laden der Seite nicht rekonstruiert werden können.
quelle
quelle
Sie können auch die Geschäftsbibliothek verwenden, die sie mit Crossbrowser-Fähigkeit für Sie ausführt.
Beispiel:
quelle
Sie können zwei Wrapper-Methoden zum Speichern und Abrufen von Objekten aus dem Sitzungsspeicher erstellen.
Verwenden Sie es folgendermaßen: - Objekt abrufen, Daten ändern und zurückspeichern.
quelle