2012-01-27 11 views
19

Ho una lista di oggetti JavaScript:

var people = [ 
    { 'name' : 'Abel', 'age' : 1 }, 
    { 'name' : 'Bella', 'age' : 2 }, 
    { 'name' : 'Chad', 'age' : 3 }, 
] 

Ho cercato di conservarle in un cookie del browser con jQuery $ .cookie():

$.cookie("people", people); 

ho quindi recuperare questo cookie e quindi provare a inserire un altro oggetto:

var people = $.cookie("people"); 
people.push(
    { 'name' : 'Daniel', 'age' : 4 } 
); 

Tuttavia, questo non funziona; Ho analizzato questo codice in Firebug e Console ha notato che people era una stringa ("[object Object],[object Object],[object Object]") e che la funzione push non esisteva.

Cosa sta succedendo? Qual è il modo corretto di archiviare e recuperare un elenco di oggetti?

+13

si dovrebbe cambiare il nome var di 'persone' in' neonati' :) – ajax333221

+0

$ .cookie ("persone", $ .param (persone)); Questo ha funzionato perfettamente con me – Nejthe

risposta

32

I cookie possono memorizzare solo stringhe. Pertanto, è necessario convertire la matrice di oggetti in una stringa JSON. Se hai la libreria JSON, puoi semplicemente usare JSON.stringify(people) e memorizzarla nel cookie, quindi usare $.parseJSON(people) per renderla un-stringify.

Alla fine, il codice sarà simile:

var people = [ 
    { 'name' : 'Abel', 'age' : 1 }, 
    { 'name' : 'Bella', 'age' : 2 }, 
    { 'name' : 'Chad', 'age' : 3 }, 
]; 
$.cookie("people", JSON.stringify(people)); 
// later on... 
var people = $.parseJSON($.cookie("people")); 
people.push(
    { 'name' : 'Daniel', 'age' : 4 } 
); 
$.cookie("people", JSON.stringify(people)); 
+0

Grazie, qual è la libreria JSON? – dangerChihuahua007

+1

https://github.com/douglascrockford/JSON-js/blob/master/json2.js –

+0

trovato molto utile ma questo var persone = $ .parseJSON ($. Cookie ("persone");) dovrebbe essere questo var people = $ .parseJSON ($. cookie ("persone")); ";" è fuori luogo. – ARWVISIONS

5

ho tentato questo oggi e non sono riuscito a farlo funzionare. Più tardi ho scoperto che era perché avevo 3 oggetti molto grandi che ho cercato di salvare in un cookie.

Il modo in cui ho lavorato è archiviare le informazioni nell'archivio locale dei browser.

esempio:

localStorage.setItem("test2", JSON.stringify(obj)) 

localStorage.getItem("test2") 

maggiori informazioni su storage locale: cookies vs local storage

4 ore del mio tempo sfogo a questo, non fate lo stesso errore.

Problemi correlati