2017-03-12 2 views
0

Ich habe paar Funktionen mit jquery cookie plugin erstellen, ich habe Probleme mit der Erstellung von Cross-Seiten.jquery cookie plugin/lesen schreiben cookie

Ich habe set.html Seite, die Cookies setzt, und show.html, die Seiten zeigt. Jedes Mal, wenn jemand das zufällige Schlüsselwertpaar set.html anzeigt, wird es dem Cookie hinzugefügt.

Wenn ich logge die Datei.html.html sieht aus wie Cookies korrekt gesetzt und gespeichert werden, aber wenn ich zu show.html gehe, wird nur der erste Schlüssel/Wert abgerufen. Ich versuche einen Pfad zu verwenden, der immer noch nicht funktioniert hat.

function savePage(ID, name){ 
    deleteAllCookies(); 
    $.cookie.json = true; 
    var idContainer = ($.cookie('the_cookie_key_3')) || []; 
    var idContainerVal = ($.cookie("the_cookie_key_val_3")) || {}; 
    console.log(typeof idContainer); 
    console.log(idContainerVal); 
    if (idContainer.indexOf(ID) === -1) { idContainer.push(ID); idContainerVal[ID] = name;} 

    $.cookie('the_cookie_key_3', idContainer, { expires: 40}); 
    $.cookie('the_cookie_key_val_3', idContainerVal, { expires: 40 }); 
    console.log(idContainerVal); 
} 

function getSavedPages(){ 
    $.cookie.json = true; 
    var idContainer = ($.cookie('the_cookie_key_val_3')) || {}; 
    console.log(idContainer); 
    return idContainer; 
} 

Antwort

0

ich es ohne die Verwendung von jQuery Cookie gemacht arbeiten, stattdessen verwendet ich Kombination Cookie und lokalen Speicher. Hier ist der Code

if (!window.localStorage) { 
    window.localStorage = { 
    getItem: function (sKey) { 
     if (!sKey || !this.hasOwnProperty(sKey)) { return null; } 
     return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1")); 
    }, 
    key: function (nKeyId) { 
     return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/, "").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId]); 
    }, 
    setItem: function (sKey, sValue) { 
     if(!sKey) { return; } 
     document.cookie = escape(sKey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"; 
     this.length = document.cookie.match(/\=/g).length; 
    }, 
    length: 0, 
    removeItem: function (sKey) { 
     if (!sKey || !this.hasOwnProperty(sKey)) { return; } 
     document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; 
     this.length--; 
    }, 
    hasOwnProperty: function (sKey) { 
     return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); 
    } 
    }; 
    window.localStorage.length = (document.cookie.match(/\=/g) || window.localStorage).length; 
} 


function getSavedPages() { 
    var page = window.localStorage.getItem('hashStoreKeyValues'); 
    if(page==null){ 
    return []; 
    } 
    var idContainer = JSON.parse(unescape(page)); 
    return idContainer; 
} 

function savePage(ID, name) { 

    var currentStatus = JSON.parse(unescape(window.localStorage.getItem('hashStoreKeys'))); 
    var currentStatusValues = JSON.parse(unescape(window.localStorage.getItem('hashStoreKeyValues'))); 
    if(currentStatus == null){ 
     currentStatus = []; 
    } 

    if(currentStatusValues == null){ 
     currentStatusValues = {}; 
    } 

    if (currentStatus.indexOf(ID) === -1) { 
     currentStatus.push(ID); 
     currentStatusValues[ID] = name; 
    } 
    window.localStorage.setItem("hashStoreKeys", JSON.stringify(currentStatus)); 
    window.localStorage.setItem("hashStoreKeyValues", JSON.stringify(currentStatusValues)); 
} 
0

In Ihrer zweiten Funktion, übergeben Sie keine Argumente $.cookie(). Sie sagen es Ihnen zu geben the_cookie_key_val_3.

Auch Linie 4 (und in ähnlicher Weise Zeile 5) sollte wie folgt sein:

var idContainer = $.cookie('the_cookie_key_3') || ''; 

Da das Ergebnis von $.cookie(string) eine JSON-String zurückgibt, oder undefined.

Und natürlich, entfernen Sie alle console.log() Aussagen vor der Verwendung von Code in der Produktion!

0

Die Zeit, für die das Cookie abgelaufen ist, ist zu kurz. Daher könnte es nicht lange genug leben, um es auf anderen Seiten zu erfassen.

Die Verwendung von Cookies zum Speichern von Daten kann schwierig sein. Aus meiner Erfahrung funktionierte es nur auf den Seiten, die geöffnet wurden, als ich den Server startete. Anstelle von Cookies verwenden Sie localStorage. LocalStorage können Sie den Schlüssel und Wert festlegen.

localStorage.setItem("data", the_cookie_key_3) 

Wo die Schlüsseldaten und Wert ist the_cookie_key_3

You can retrieve the data by using localStorage.getItem("data");