2012-01-29 15 views
11

Sto sviluppando un'applicazione utilizzando jQuery che utilizza i cookie. Al momento, si trova a application.html sul mio desktop PC.Perché il cookie jQuery non ha effettivamente impostato un cookie?

Tuttavia, non riesco a memorizzare e recuperare un cookie. Ho incluso jquery-1.7.1.min.js, json2.js e jquery.cookie.js nel mio file HTML in questo ordine.

Ecco come sto memorizzazione di un cookie a durare per 7 giorni:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); 

la matrice globale people_obj_array sembra

[ 
     { 
      "name": "Adam", 
      "age": 1, 
     }, 
     { 
      "name": "Bob", 
      "age": 2, 
     }, 
     { 
      "name": "Cathy", 
      "age": 3, 
     }, 
    ] 

quando i test di crittografia JSON con alert(JSON.stringify(people_obj_array)), si guarda bene:

JSON test

Tuttavia, quando ho recuperare questo cookie tramite:

alert($.cookie("people")); 

prima ancora di aggiornare la pagina, un avviso salta fuori che dice "nulla." Il testo non dovrebbe essere la stringa JSON di avviso? Sto usando correttamente la libreria dei cookie di JQuery?


Giusto per chiarire, ecco come lo sto testando:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); // store 
alert($.cookie("people")); // attempt to retrieve 

ho Firebug, e io sono disposto a fare alcuni test Console.

+2

Credo che il problema è che il meccanismo dei cookie non è definito per i file sul disco locale. Hai provato a configurare un server Web locale e a pubblicare il tuo file come 'http: // localhost/application.html'? –

+0

Grazie! Ho finito per usare solo la memoria locale. È molto più semplice e funziona sia a livello locale che su un server web. Il lato negativo è, naturalmente, i browser più vecchi non lo supportano, il che va bene per me. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007

risposta

11

Probabilmente il fatto che il file si trovi sul desktop causi il problema. I browser normalmente si comportano servendo i cookie in base al dominio da cui sono stati ricevuti e al loro percorso.

Potrebbe non essere possibile leggere il cookie subito dopo averlo impostato: La scrittura di un cookie comporta l'impostazione di intestazioni in una richiesta HTTP e, analogamente, la lettura implica la lettura di intestazioni in una risposta HTTP.

Prova ad ospitare la tua pagina su un server web e vedi se questo funziona per te.

+0

Grazie, ho ospitato il sito su un server web pubblico, e i cookie hanno funzionato. Questa pagina ha maggiori dettagli: http://code.google.com/p/chromium/issues/detail?id=535 – dangerChihuahua007

+1

@DavidFaux sembra che tu stia usando Chromium, quindi posso presumere che stai usando anche Linux ... bene se si desidera configurare un server Web locale per i test, è possibile sudo apt-get install lamp-server ^, quindi sudo adduser www-data', quindi i seguenti due comandi. 'sudo chown -R www-data: www-data/var/www' e' sudo chmod -R g + rw/var/www' dovrebbe proprio fare! poi tutto il tuo web dev va in '/ var/www' e tu provi navigando verso http: // localhost/ – rlemon

+0

grazie per la risposta :) –

1

Dalla mia ricerca jquery.cookie.js è abbastanza vecchio, e non sembra essere mantenuto. Potresti avere più fortuna usando invece this library. La sua descrizione su Google Code è "Javascript Cookie Library con associazioni jQuery e supporto JSON" e include metodi per tutto ciò che stai cercando di fare!

+0

Grazie, terrò a mente. – dangerChihuahua007

+0

Ultimo aggiornamento di jquery.cookie è 7 giorni fa, il 2013-09-11. Usiamo quel componente che è molto utile. – foxontherock

+0

Potrebbe essere che hanno ripreso lo sviluppo. Quando ho fatto questo commento la biblioteca non era stata aggiornata in oltre 2 anni. – daniel0mullins

2

Se si verificano problemi con il plug-in dei cookie, perché non creare semplicemente le proprie funzioni cookie? Leggi, scrivi e (facoltativo) elimina.

var createCookie = function(name, value, days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = '; expires=' + date.toGMTString(); 
    } 
    else var expires = ''; 
     document.cookie = name + '=' + value + expires + '; path=/'; 
}; 
var readCookie = function(name) { 
    var nameEQ = name + '='; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 
    } 
    return null; 
}; 
var eraseCookie = function(name) { 
    createCookie(name, '', -1); 
}; 

Non posso commentare il plug-in specifico come non ho mai usato .. Tuttavia queste funzioni tutto il lavoro e sono stati testati.

Così, per il tuo esempio:

createCookie("people", JSON.stringify(people_obj_array), 7); // store 
alert(readCookie("people")); // retrieve 
eraseCookie("people"); // remove 
alert(readCookie("people")); // oo look i'm no longer here. 
+1

Sicuro che funzioni per le pagine Web sul disco locale? AFAIK alcuni browser non gestiscono affatto i cookie locali. –

+1

Non ho testato quel caso .. tuttavia se i cookie non sono disponibili localmente, supponendo che l'OP usi un browser moderno * la memoria locale * dovrebbe funzionare .. – rlemon

+0

Grazie! Lo storage locale funziona perfettamente. È anche così semplice. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007

Problemi correlati