2010-11-19 20 views
99

¿Cómo guardo los datos JSON en una cookie?jquery save json objeto de datos en cookie

Mis datos JSON se parece a esto

$("#ArticlesHolder").data('15', {name:'testname', nr:'4',price:'400'}); 
$("#ArticlesHolder").data('25', {name:'name2', nr:'1', price:'100'}); 
$("#ArticlesHolder").data('37', {name:'name3', nr:'14', price:'60'}); 

y quiero hacer algo como

var dataStore = $.cookie("basket-data", $("#ArticlesHolder").data()); 

y para recuperar los datos que quiero cargarlo en $("#ArticlesHolder") como

$.each($.cookie("basket-data"), function(i,e){ 
$("#ArticlesHolder").data(i, e); 
}); 

¿Alguien sabe si estoy en el camino correcto o debería hacerse de otra manera? En pocas palabras, ¿cómo pongo y extraigo los datos json de una cookie?

+7

Simplemente siendo pedantes, pero no hay "datos JSON" en su pregunta. Tiene algunos objetos de JavaScript que ha definido mediante la notación literal de objetos (no JSON, JSON es un subconjunto de la notación literal de objetos), pero no hay JSON allí. http://json.org Sin embargo, es casi seguro que quiera * usar * JSON como el formato de datos para almacenar sus objetos en la cadena de cookies. –

Respuesta

181

Puede serializar los datos como JSON, como esto:

$.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data())); 

Luego de obtener de la cookie:

$("#ArticlesHolder").data(JSON.parse($.cookie("basket-data"))); 

Esto se basa en JSON.stringify() and JSON.parse() para serializar/deserializar el objeto de datos, por los navegadores más antiguos (IE < 8) incluyen json2.js para obtener la funcionalidad JSON. Este ejemplo utiliza el jQuery cookie plugin

+2

JSON no está permitido en las cookies de Opera desde la antigüedad http://my.opera.com/community/forums/topic.dml?id=663192&t=1358850781&page=1#comment12828912 También tengo este error. Aunque @ cookie @ plugin use @ encodeURIComponent @, pbug no debería aparecer. – kirilloid

+1

Esta pregunta y respuesta me llevan a creer que 'cookie' es una función incorporada en jQuery. Parece ser que no. o está en desuso? si son los complementos que encuentro, vincularlos sería genial para evitar la confusión ... –

+1

@TJ De hecho, es un complemento, el complemento de cookies jQuery. Puede encontrarlo aquí: http://plugins.jquery.com/cookie/ Realmente me pregunto por qué no está en el núcleo en este punto ... –

7

usa JSON.stringify(userData) para el objeto coverty json en la cadena.

var dataStore = $.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data())); 

y para volver por el uso de cookies JSON.parse()

var data=JSON.parse($.cookie("basket-data")) 
0

Prueba con esto: https://github.com/tantau-horia/jquery-SuperCookie

Uso rápida:

crear - crear cookies

cheque - check existencia

verificar - verificar valor de la cookie si JSON

check_index - verificar si existe índice en JSON

read_values ​​- leer valor de la cookie como cadena

read_JSON - leer valor de la cookie como JSON oponerse

read_value - valor leído del índice almacenado en el objeto JSON

replace_value - sustituir el valor de un índice especificado almacenado en el objeto JSON

remove_value - quitar valor y el índice almacenado en el objeto JSON

sólo tiene que utilizar:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"}); 
$.super_cookie().read_json("name_of_the_cookie"); 
35

Ahora ya no hay necesidad de use JSON.stringify explícitamente. Sólo hay que ejecutar esta línea de código

$.cookie.json = true; 

Después de que se puede guardar cualquier objeto de galleta, que se convierte automáticamente en JSON y JSON de vuelta de la lectura de la galleta.

var user = { name: "name", age: 25 } 
$.cookie('user', user); 
... 

var currentUser = $.cookie('user'); 
alert('User name is ' + currentUser.name); 

Pero biblioteca JSON no viene con jquery.cookie, así que hay que descargar por sí mismo e incluir en la página HTML antes de jquery.cookie.js

+3

¿qué biblioteca de jquery.cookie está usando? Eso parece importante ... – Kevin

+0

Éste, Kevin: https://github.com/carhartl/jquery-cookie –

+2

Probé este enfoque sin $ .cookie.json = true y obtuve [object object] como el valor de mi cookie. Luego configúralo como verdadero e intenta pasar el objeto directamente a la cookie y no se llenó ninguna cookie. – jacobross85

3

No es una buena práctica para guardar el valor que se devuelve desde JSON.stringify(userData) a una cookie; puede provocar un error en algunos navegadores.

Antes de usarlo, debe convertirlo a base 64 (utilizando btoa), y al leerlo, convertir de base 64 (usando atob).

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

write_cookie(val) 
+3

¿Tiene alguna referencia a un navegador que tiene problemas con esto? – Marthin

+1

uso una lista de jsons como cookie en Chrome en la plataforma django. tiene algunos problemas Además, siempre es mejor ocultar los datos reales pasados ​​por la cookie del usuario –

+0

siempre decir siempre –