2012-01-27 1 views
19

J'ai une liste d'objets javascript:

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

J'ai essayé de les stocker dans un cookie de navigateur avec .cookie jQuery $():

$.cookie("people", people); 

Je récupère alors ce cookie, puis essayer de pousser un autre objet dedans:

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

Cependant, cela ne fonctionne pas; J'ai analysé ce code dans Firebug, et la console a noté que people était une chaîne ("[object Object],[object Object],[object Object]") et que la fonction de poussée n'existait pas.

Que se passe-t-il? Quelle est la bonne façon de stocker et de récupérer une liste d'objets?

+13

vous devriez changer le nom var de 'people' en' babies' :) – ajax333221

+0

$ .cookie ("people", $ .param (people)); Cela a fonctionné parfaitement pour moi – Nejthe

Répondre

32

Les cookies ne peuvent stocker que des chaînes. Par conséquent, vous devez convertir votre tableau d'objets en une chaîne JSON. Si vous avez la bibliothèque JSON, vous pouvez simplement utiliser JSON.stringify(people) et le stocker dans le cookie, puis utiliser $.parseJSON(people) pour le dé-stringifier.

En fin de compte, votre code ressemblerait à ceci:

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

Merci, quelle est la bibliothèque JSON? – dangerChihuahua007

+1

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

+0

trouvé cela très utile, mais cette var gens = $ .parseJSON ($. Cookie ("people");) devrait être cette var people = $ .parseJSON ($. cookie ("personnes")); ";" est hors de propos. – ARWVISIONS

5

Je tentais aujourd'hui et ne pouvait pas le faire fonctionner. Plus tard, j'ai découvert que c'était parce que j'avais 3 très gros objets que j'ai essayé d'enregistrer dans un cookie.

La façon dont j'ai travaillé autour de ceci était de stocker les informations dans le stockage local des navigateurs.

exemple:

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

localStorage.getItem("test2") 

plus d'informations sur le stockage local: cookies vs local storage

4 heures de mon temps libre cours à cela, ne faites pas la même erreur.

Questions connexes