web-dev-qa-db-fra.com

jquery enregistrer un objet de données json dans un cookie

Comment enregistrer des données JSON dans un cookie?

Mes données JSON ressemblent à ceci

$("#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'});

Et je veux faire quelque chose comme

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

et pour récupérer les données que je veux charger dans $("#ArticlesHolder") comme

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

est-ce que quelqu'un sait si je suis sur la bonne voie ou si cela devrait être fait d'une autre manière? En termes simples, comment puis-je mettre et extraire des données JSON d'un cookie?

106
Marthin

Vous pouvez sérialiser les données au format JSON, comme ceci:

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

Ensuite, pour l'obtenir du cookie:

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

Cela repose sur JSON.stringify() et JSON.parse() pour sérialiser/désérialiser votre objet de données, pour les anciens navigateurs (IE <8), inclure json2.js pour obtenir la fonctionnalité JSON. Cet exemple utilise le plugin jQuery cookie

190
Nick Craver

Maintenant, il n'est déjà plus nécessaire d'utiliser JSON.stringify explicitement. Il suffit d'exécuter cette ligne de code

$.cookie.json = true;

Après cela, vous pouvez enregistrer n'importe quel objet dans un cookie, qui sera automatiquement converti en JSON et inversement à partir de JSON lors de la lecture du cookie.

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

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

Mais la bibliothèque JSON ne vient pas avec jquery.cookie, vous devez donc la télécharger vous-même et l'inclure dans la page html avant jquery.cookie.js

40
Vitalii Korsakov

utilisez JSON.stringify(userData) pour réduire un objet json à une chaîne.

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

et pour récupérer un cookie, utilisez JSON.parse()

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

Il est déconseillé de sauvegarder la valeur renvoyée par JSON.stringify(userData) dans un cookie; cela peut conduire à un bug dans certains navigateurs.

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

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

write_cookie(val)
3
Eyal Ch

Avec la sérialisation des données en JSON et en Base64, la dépendance jquery.cookie.js:

var putCookieObj = function(key, value) {
    $.cookie(key, btoa(JSON.stringify(value)));
}

var getCookieObj = function (key) {
    var cookie = $.cookie(key);
    if (typeof cookie === "undefined") return null;
    return JSON.parse(atob(cookie));
}

:)

2
asimov

Essayez celui-ci: https://github.com/tantau-horia/jquery-SuperCookie

Utilisation rapide:

créer - créer un cookie

vérifier - vérifier l'existance

verify - vérifie la valeur du cookie si JSON

check_index - vérifie si l'index existe dans JSON

read_values ​​- lit la valeur du cookie sous forme de chaîne

read_JSON - lit la valeur du cookie en tant qu'objet JSON

read_value - valeur de lecture de l'index stockée dans un objet JSON

replace_value - remplace la valeur d'un index spécifié stocké dans un objet JSON

remove_value - supprime la valeur et l'index stockés dans un objet JSON

Il suffit d'utiliser:

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