2011-03-31 20 views
6

Im intentar almacenar objetos JSON en una cookie, pero Im que funciona con algunos problemas. puedo crear mi objeto como éste:almacenamiento y recuperación de objetos JSON a/desde una cookie

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

i continuación, guarde este objeto en mi galleta. A medida que se agregan más productos (es una cesta de la compra) agrego más cadenas al agregar nuevos objetos al final de la cadena de cookies (así que básicamente tengo muchos objetos pequeños separados). Sin embargo, tengo problemas para recuperar los objetos de la cadena de cookies. Ambos $.parseJSON y eval fallan cuando intento leer los objetos desde la cookie. Cualquier ayuda sería apreciada.

+1

espero que sepas que las cookies tienen un espacio muy limitado. Probablemente deberías mirar el almacenamiento local. – epascarello

+0

es 4K ... no mucho – ezmilhouse

Respuesta

9

Es probablemente debería ser como:

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

El [] significa una matriz. Cuando desee agregar otro producto, cárguelo de la cookie, actualice la matriz y luego guárdela de nuevo. Si lo desea, podría omitir el objeto externo y hacer que la cookie sea la matriz.

EDITAR: Diga cookieStr es su cookie.

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

¿cómo puedo agregar nuevos productos a esa cadena cuando se agregan más a la cesta? – richzilla

+0

¿Por qué está usando '$ .parseJSON()' en lugar de 'JSON.parse()'? ¿Es la versión jQuery más robusta? Compatibilidad hacia atrás –

+0

... –

6

No es una buena práctica guardar el valor que devolvió de JSON.stringify (cookieStr) a la cookie. puede provocar un error en algunos navegadores.

antes de usarlo debe convertirlo en base 64 (usando btoa), y al leerlo, la conversión de base 64 (usando atob)

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

write_cookie(val) 
+0

Un valor codificado en URL también funciona bien, y [se puede usar en IE <10] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) – z0r

+0

"it puede provocar un error en algunos navegadores "¿qué error? Sería útil tener más contexto o un enlace a algo que diga cuál es el error. –

+0

errores de JavaScript. –

Cuestiones relacionadas