Pure Javascript – salva l’object nel cookie

No jQuery.

Voglio memorizzare un object o array in un cookie.

L’object dovrebbe essere utilizzabile dopo l’aggiornamento della pagina.

Come faccio a farlo con puro JavaScript? Ho letto molti post, ma non so come serializzare in modo appropriato.


MODIFICA: Codice:

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

  2. Come mantenere la funzionalità, ma modificare la struttura dell’istanza per poter serializzare con stringify ?

Prova quello per scrivere

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

Per leggerlo, prendi:

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

Per eliminarlo, prendi:

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

Per serializzare oggetti / istanze complesse, perché non scrivere una funzione di dump dei dati nella tua istanza:

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

Quindi si esegue il dump dei dati, lo si imposterà, lo si scrive nel cookie e la volta successiva che si desidera utilizzarlo basta:

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

Utilizzare il metodo .toString() proprio .toString() se fornisce una serializzazione significativa o JSON.stringify() . Si noti, tuttavia, che i cookie sono generalmente di lunghezza limitata e non saranno in grado di contenere grandi quantità di dati.

Se è ansible serializzare il proprio object nella sua rappresentazione di stringa canonica e può non serializzarlo nuovamente nella sua forma object da detta rappresentazione di stringa, allora sì è ansible inserirlo in un cookie.

Una class di adattamento dei cookie da: http://www.sitepoint.com/cookieless-javascript-session-variables/

Tutto quello che devi fare è impostare e ottenere le variabili che devi memorizzare nei cookie.

Lavora con: int, string, array, list, Complex object

Esempio:

 var toStore = Session.get('toStore'); if (toStore == undefined) toStore = ['var','var','var','var']; else console.log('Restored from cookies'+toStore); Session.set('toStore', toStore); 

Classe:

 // Cross reload saving if (JSON && JSON.stringify && JSON.parse) var Session = Session || (function() { // session store var store = load(); function load() { var name = "store"; var result = document.cookie.match(new RegExp(name + '=([^;]+)')); if (result) return JSON.parse(result[1]); return {}; } function Save() { var date = new Date(); date.setHours(23,59,59,999); var expires = "expires=" + date.toGMTString(); document.cookie = "store="+JSON.stringify(store)+"; "+expires; }; // page unload event if (window.addEventListener) window.addEventListener("unload", Save, false); else if (window.attachEvent) window.attachEvent("onunload", Save); else window.onunload = Save; // public methods return { // set a session variable set: function(name, value) { store[name] = value; }, // get a session value get: function(name) { return (store[name] ? store[name] : undefined); }, // clear session clear: function() { store = {}; } }; })();