2011-03-31 3 views
6

Je tente de stocker des objets json dans un cookie, mais je rencontre quelques problèmes. Je peux créer mon objet comme celui-ci:Stockage et récupération d'objets json vers/depuis un cookie

product = { 
    "name" : "prodname", 
    "quantity" : 4 
} 

i puis enregistrez cet objet dans mon cookie. Au fur et à mesure que d'autres produits sont ajoutés (c'est un panier) j'ajoute d'autres chaînes en ajoutant de nouveaux objets à la fin de la chaîne de cookie (donc j'ai essentiellement beaucoup de petits objets séparés). J'ai du mal à récupérer les objets de la chaîne de cookie. Les deux $.parseJSON et eval échouent lorsque je tente de lire les objets à partir du cookie. Toute aide serait appréciée.

+1

espère que vous savez que les cookies ont un espace très limité. Vous devriez probablement regarder le stockage local. – epascarello

+0

c'est 4K ... pas beaucoup – ezmilhouse

Répondre

9

Il devrait probablement ressembler à:

{"products": [ 
    { 
     "name" : "prodname", 
     "quantity" : 4 
    }, 
    { 
     "name" : "prodname2", 
     "quantity" : 3 
    } 
]} 

Le [] signifie un tableau. Lorsque vous souhaitez ajouter un autre produit, chargez-le à partir du cookie, mettez à jour le tableau, puis enregistrez-le à nouveau. Si vous le souhaitez, vous pouvez ignorer l'objet externe et faire en sorte que le cookie soit simplement le tableau. EDIT: Dites cookieStr est votre cookie.

var root = $.parseJSON(cookieStr); 
root.products.push(newProduct); 
cookieStr = JSON.stringify(root); 
+0

comment est-ce que j'ajouterais de nouveaux produits à cette chaîne quand plus sont ajoutés au panier? – richzilla

+0

Pourquoi utilisez-vous $ .parseJSON() 'au lieu de' JSON.parse() '? La version de jQuery est-elle plus robuste? –

+0

Rétrocompatibilité ... –

6

ne est pas une bonne pratique pour sauvegarder la valeur de retour de JSON.stringify (cookieStr) au cookie. Cela peut entraîner un bug dans certains navigateurs.

avant de l'utiliser, vous devez le convertir en base64 (en utilisant btoa), et lors de la lecture, la conversion de base64 (en utilisant atob)

val = JSON.stringify(cookieStr) 
val = btoa(val) 

write_cookie(val) 
+0

Une valeur codée en URL fonctionne également bien, et [peut être utilisé sur IE <10] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) – z0r

+0

"it peut conduire à un bug dans certains navigateurs "quel bug? Il serait utile d'avoir plus de contexte ou un lien vers quelque chose qui dit ce qu'est le bogue. –

+0

erreurs de javascript. –

Questions connexes