2012-01-27 10 views
19

Mam listę obiektów javascript:

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

Starałem się je przechowywać w pliku cookie przeglądarki z jQuery $ .cookie():

$.cookie("people", people); 

I następnie pobrać ten plik, a następnie spróbuj wepchnij do niego inny obiekt:

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

To jednak nie działa; Przeanalizowałem ten kod w Firebug, a Console zauważył, że people był ciągiem znaków ("[object Object],[object Object],[object Object]") i że funkcja push nie istnieje.

Co się dzieje? Jaki jest właściwy sposób przechowywania i pobierania listy obiektów?

+13

powinieneś zmienić nazwę var 'people' na' babies' :) – ajax333221

+0

$ .cookie ("ludzie", $ .param (ludzie)); To zadziałało mi doskonale – Nejthe

Odpowiedz

32

Pliki cookie mogą przechowywać tylko ciągi. Dlatego musisz przekonwertować tablicę obiektów na ciąg JSON. Jeśli masz bibliotekę JSON, możesz po prostu użyć JSON.stringify(people) i zapisać ją w pliku cookie, a następnie użyć $.parseJSON(people), aby usunąć jej łańcuch.

W końcu, Twój kod będzie wyglądać następująco:

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

Dziękuję, czym jest biblioteka JSON? – dangerChihuahua007

+1

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

+0

uznał to za bardzo pomocne, ale to var people = $ .parseJSON ($. Cookie ("people");) powinno być tym var people = $ .parseJSON ($. cookie ("people")); ";" jest nie na miejscu. – ARWVISIONS

5

próbowałem to dzisiaj i nie mógł dostać się do pracy. Później dowiedziałem się, że to dlatego, że miałem 3 bardzo duże obiekty, które próbowałem zapisać w ciasteczku.

Sposób, w jaki to robiłem, polegał na przechowywaniu informacji w lokalnej pamięci przeglądarki.

przykład:

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

localStorage.getItem("test2") 

dalej informacji o lokalnej pamięci masowej: cookies vs local storage

4 godziny mojego czasu upust tym nie popełnić tego samego błędu.

Powiązane problemy