2017-02-13 2 views
-1
var parsed = JSON.parse($.cookie('inavm_inventory')); 

inventoryID = parsed['ids']; 
inventoryName = parsed['names']; 
inventoryCount = parsed['productcount']; 

Ich habe ein Cookie "inavm_inventory", die in ihrem 3-Arrays hat "ids", "Name" und "Product".Parsen Cookie mit json (Array), Array. "Push" jetzt keine Funktion

Ich habe auch 3 lokale Variablen wie Sie oben sehen können.

Das Hinzufügen zum Cookie funktioniert alles gut - aber wenn ein Benutzer die Seite lädt, versuche ich die Cookie-Arrays in die lokalen Variablen zu pushen.

Es funktioniert alles ohne den Code oben, aber wenn Sie den Code oben verwenden - es bricht das "Array". Ich habe die Werte protokolliert und sie sehen aus wie Arrays, aber ich vermute, sie können als Strings formatiert werden.

Ich versuche nur, sie wieder zu Arrays zu formatieren, so dass. Push wieder auf meinen Arrays funktioniert.

Cookie-Beispieldaten:

{ 
    "ids": "[\"quant[2]\",\"quant[3]\"]", 
    "names": "[\"2 3 Seater Sofa\",\"0 2 Seater Sofa\"]", 
    "productcount": "[8,0]" 
} 
+1

Es ist wirklich schwer nur mit dem Code, den Sie geschrieben zu helfen. (Beachten Sie auch, dass 'parsed ['ids']' als 'analysed.ids' geschrieben werden kann.) – Pointy

+0

Die Art, wie Sie' geparst' verwenden, sieht nicht so aus, als wäre es ein Array. Es ist also nicht verwunderlich, wenn Sie 'parsed.push (...)' aufrufen und es nicht funktioniert (wenn Sie das gerade tun). –

+0

Beispiel für Cookie-Daten: {"ids": "[\" quant [2] \ ", quant [3] \"] "," names ":" [\ "2 3 Seater Sofa \", \ "0 2 Sitzer Sofa \"] "," productcount ":" [8,0] "} – user3676945

Antwort

0

Ihr Cookie enthält ein Objekt mit drei Eigenschaften. Die Werte dieser Eigenschaften sind alle Strings, nicht Arrays.

Hier ist, wie es aussehen würde, wenn sie Arrays sind:

{ 
    "ids": ["quant[2]","quant[3]"], 
    "names": ["2 3 Seater Sofa","0 2 Seater Sofa"], 
    "productcount": [8,0] 
} 

Also Sie wollen, betrachten, was den Wert des Cookies ist die Herstellung und korrigieren, damit er diese drei Felder korrekt ausgibt.

Wenn Sie es mit JavaScript erstellen, diese richtig die oben schaffen würde (Gebäude aus Stücke, die oben auch als ein einziger Block funktionieren würde, aber das ist wahrscheinlich nicht, wie Sie es tun):

var obj = {}; 
obj.ids = ["quant[2]","quant[3]"]; 
obj.names = ["2 3 Seater Sofa","0 2 Seater Sofa"]; 
obj.productcount = [8,0]; 

Oder sogar

var obj = { 
    ids: [], 
    names: [], 
    productcount: [] 
}; 
obj.ids.push("quant[2]"); 
obj.names.push("2 3 Seater Sofa"); 
obj.productcount.push(8); 
obj.ids.push("quant[3]"); 
obj.names.push(["0 2 Seater Sofa"]); 
obj.productcount.push(0); 

Erstellen Sie dann das Cookie:

$.cookie('inavm_inventory', JSON.stringify(obj))); 

Sie sollten erwägen, die die Struktur vollständig zu ändern, aber, und ein einzelnes Array von Objekten mit:

[ 
    { 
     id: "quant[2]", 
     names: "2 3 Seater Sofa", 
     count: 8 
    }, 
    { 
     id: "quant[3]", 
     name: "0 2 Seater Sofa", 
     count: 0 
    } 
] 

Dann, wenn Sie es analysiert würde, dann würden Sie die Objekte verwenden:

console.log(parsed[0].id); // "quant[2]" 
console.log(parsed[0].name); // "2 3 Seater Sofa" 
console.log(parsed[0].count); // 8 

... und so weiter (wahrscheinlich in einer Schleife).

So, hier würden Sie beginnen mit:

var products = []; 

und schieben volle Elemente auf diesem Array:

products.push({id: "quant[2]", name: "2 3 Seater Sofa", count: 8}); 
+0

Danke für Ihre Eingabe. Cookies erlauben keine Arrays, deshalb sind sie Strings. Ich hätte erwähnen sollen, dass ich stringify verwende, um dies zu tun, so dass ich "Arrays" in meinen Cookie einfügen kann: document.cookie = "inavm_inventory =" + JSON.stringify ({ids: JSON.stringify (inventoryID), name: JSON.stringify (inventarName), productcount: JSON.stringify (inventoryCount)}) + "; max-age = 2592000;"; – user3676945

+0

@ user3676945: Natürlich erlauben Cookies keine Arrays; Deshalb habe ich oben 'JSON.stringify' gezeigt. Es funktioniert genauso gut mit der alternativen Struktur wie Ihre ursprüngliche Struktur. In beiden Fällen speichern wir JSON, eine Zeichenfolge. –

+0

Wie in diesem Post empfohlen, wo ich ursprünglich die Lösung gefunden: http://stackoverflow.com/questions/2980143/i-want-to-store-javascript-array-as-a-cookie Zu denen ich bin Verwenden von JSON.parse zum Abrufen der Arrays zurück von stringify ... aber es führt zu meinem aktuellen Problem, dass sie nicht vom Typ Array sind. Irgendwie müssen sie wieder in Arrays konvertieren. Ich habe versucht mit "InventoryID = [InventoryID]", um sie in Arrays so zu konvertieren, aber funktioniert nicht so gut – user3676945