Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
188
rated 0 times [  191] [ 3]  / answers: 1 / hits: 108540  / 12 Years ago, thu, july 5, 2012, 12:00:00

No jQuery.



I want to store an object or array in a cookie.



The object should be usable after page refresh.



How do I do that with pure JavaScript? I read many posts, but do not know how to serialize appropriately.






EDIT:
Code:



var instances = {};
...
instances[strInstanceId] = { container: oContainer };
...
instances[strInstanceId].plugin = oPlugin;
...
JSON.stringify(instances);
// throws error 'TypeError: Converting circular structure to JSON'



  1. How do I serialize instances?


  2. How do I maintain functionality, but change structure of instance to be able to serialize with stringify?



More From » object

 Answers
13

Try that one to write



function bake_cookie(name, value) {
var cookie = [name, '=', JSON.stringify(value), '; domain=.', window.location.host.toString(), '; path=/;'].join('');
document.cookie = cookie;
}


To read it take:



function read_cookie(name) {
var result = document.cookie.match(new RegExp(name + '=([^;]+)'));
result && (result = JSON.parse(result[1]));
return result;
}


To delete it take:



function delete_cookie(name) {
document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.', window.location.host.toString()].join('');
}


To serialize complex objects / instances, why not write a data dump function in your instance:



function userConstructor(name, street, city) {
// ... your code
this.dumpData = function() {
return {
'userConstructorUser': {
name: this.name,
street: this.street,
city: this.city
}
}
}


Then you dump the data, stringify it, write it to the cookie, and next time you want to use it just go:



  var mydata = JSON.parse(read_cookie('myinstances'));
new userConstructor(mydata.name, mydata.street, mydata.city);

[#84444] Wednesday, July 4, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jacie

Total Points: 490
Total Questions: 111
Total Answers: 105

Location: Mali
Member since Sat, Feb 12, 2022
2 Years ago
;