2013-04-18 8 views
23

I haben eine Funktion in Javascript:JSON Push-Objekte auf Array in local

var a = []; 
function SaveDataToLocalStorage(data) 
{  
    var receiveddata = JSON.stringify(data); 
    a.push(receiveddata); 
    alert(a); 

    localStorage.setItem('session', a); 

} 

die Datenparameter eine JSON Objekt ist.

Aber jedes Mal, wenn ich auf die Schaltfläche klicke, überschreibt es die Daten in meinem lokalen Speicher.

Weiß jemand, wie man das macht?

+1

Try 'Fenster zu verwenden, erhalten zu JSON-String am Set und analysiert umgewandelt werden = []; 'und dann drücken Sie so; 'window.a.push (receiveddata)'. Oder speichern Sie es einfach einmal in einem neuen "a" zu Beginn der Funktion. –

+0

überschreibt immer noch – nielsv

+0

Machst du es auch am eigentlichen Eingang? 'localStorage.setItem ('session', window.a);' –

Antwort

56

Es gibt ein paar Schritte, die Sie richtig ergreifen müssen, um diese Informationen in Ihrem localstorage zu speichern. Bevor wir uns jedoch dem Code zuwenden, beachten Sie bitte, dass localStorage (zur aktuellen Zeit) keinen beliebigen Datentyp außer Strings enthalten kann. Sie müssen das Array für den Speicher serialisieren und es dann erneut analysieren, um Änderungen daran vorzunehmen.

Schritt 1:

Die erste Code-Snippet nur ausgeführt werden, wenn Sie nicht bereits eine serialisierte Array in Ihrem local session Variable zu speichern.
Um die localstorage ist korrekt eingerichtet und Speichern eines Array zu gewährleisten, den folgenden Codeausschnitt laufen zuerst:

var a = []; 
a.push(JSON.parse(localStorage.getItem('session'))); 
localStorage.setItem('session', JSON.stringify(a)); 

Der obige Code sollte nur einmal und nur ausgeführt werden, wenn Sie nicht bereits Speichern eines Array in Ihrer localStorage session Variable.

Ändern Sie bitte Ihre Funktion wie so: Wenn Sie bereits das 2.

Schritt 2 Schritt tun werden überspringen

function SaveDataToLocalStorage(data) 
{ 
    var a = []; 
    // Parse the serialized data back into an aray of objects 
    a = JSON.parse(localStorage.getItem('session')); 
    // Push the new data (whether it be an object or anything else) onto the array 
    a.push(data); 
    // Alert the array value 
    alert(a); // Should be something like [Object array] 
    // Re-serialize the array back into a string and store it in localStorage 
    localStorage.setItem('session', JSON.stringify(a)); 
} 

Diese erledigt den Rest für Sie treffen sollten. Wenn Sie es analysieren, wird es zu einem Array von Objekten.

Hoffe, das hilft.

+0

Du bist der Beste! Vielen Dank! – nielsv

+0

@ user1775531 Kein Problem, Kumpel! Froh, dass ich Helfen kann. Viel Glück und gute Programmierung! :) – War10ck

+0

Danke. Weißt du, wie ich es aus dem lokalen Speicher als separate Arrays bekommen kann? – nielsv

8

Ab sofort können Sie nur Zeichenfolgewerte in localStorage speichern. Sie müssen das Array-Objekt serialisieren und dann in localStorage speichern.

Zum Beispiel:

localStorage.setItem('session', a.join('|')); 

oder

localStorage.setItem('session', JSON.stringify(a)); 
-1
var arr = [ 'a', 'b', 'c']; 
arr.push('d'); // insert as last item 
5

eine ganze Reihe in einem Eintrag local Putting ist sehr ineffizient: das Ganze muss neu codiert werden Sie jedes Mal etwas zum Array hinzufügen oder einen Eintrag ändern.

Eine Alternative ist die Verwendung http://rhaboo.org, die jedes JS-Objekt speichert, jedoch tief geschachtelt, wobei für jeden Terminal-Wert ein separater localStorage-Eintrag verwendet wird.Arrays sind viel getreuer, einschließlich nicht-numerischen Eigenschaften und verschiedene Arten von Kargheit, Objekt Prototypen/Bauer restauriert werden in Standardfällen wieder hergestellt und die API ist lächerlich einfach:

var store = Rhaboo.persistent('Some name'); 
store.write('count', store.count ? store.count+1 : 1); 

store.write('somethingfancy', { 
    one: ['man', 'went'], 
    2: 'mow', 
    went: [ 2, { mow: ['a', 'meadow' ] }, {} ] 
}); 
store.somethingfancy.went[1].mow.write(1, 'lawn'); 

BTW, ich es geschrieben habe.

+0

Es ist eine großartige Bibliothek! Vielen Dank! –

2

Eine Sache, die ich vorschlagen kann, ist das Speicherobjekt zu erweitern, um Objekte und Arrays zu behandeln.

Localstorage kann nur Strings verarbeiten, so können Sie erreichen, dass mit diesen Methoden

Storage.prototype.setObj = function(key, obj) { 
    return this.setItem(key, JSON.stringify(obj)) 
} 
Storage.prototype.getObj = function(key) { 
    return JSON.parse(this.getItem(key)) 
} 

es alle Wert Verwendung auf