2017-02-02 2 views
2

Ich möchte einige Daten zwischen verschiedenen Registerkarten mit SessionStorage auf meinem lokalen Server übergeben. Ich habe einige Wege versucht, konnte aber nicht erfolgreich sein. Bitte helfen Sie mir.Sitzungsspeicher funktioniert nicht auf verschiedenen Registerkarte

Dies ist meine einzige Datei, in der ich meine Daten einstelle.

if (typeof(Storage) !== "undefined") { 
    var loggedInUserId = loggedInId; 
    console.log(loggedInUserId); 
    sessionStorage.clear(); 
    sessionStorage.setItem("loggedin_id", loggedInUserId); 
    console.log(sessionStorage); 
} 

und ich versuche, die Daten aus anderer Datei von einem anderen Projekt von meinem lokalen Laufwerk

var companyId = sessionStorage.getItem("loggedin_id"); 
zu holen

Das Problem ist, Daten über den Browser setzen aber wenn ich überprüfe auf meinem anderen Projekt Tab den Speicher leer bleiben.

hinweis: meine zwei projekte sind in zwei laufwerken, weiß nicht, es macht unterschied oder nicht. Bitte, jeder gibt mir einen Weg, es zu lösen. Danke .

+0

Meine erste Vermutung wäre, dass die beiden Registerkarten nicht die gleiche Sitzung teilen. Können Sie localStorage verwenden? – Halcyon

+0

'auf meinem lokalen Server' - so ... http Server richtig? –

+0

Meinst du mit "zwei Laufwerke" eine statische HTML-Datei, die auf zwei verschiedenen Pfaden gespeichert ist? Wenn dies der Fall ist, ist die "Domäne" auch anders und teilt die Sitzung nicht. –

Antwort

0

Fady Sadeks Antwort ist der richtige Weg, es zu tun, ich würde eine Überprüfung hinzufügen, ob die localStorage verfügbar ist, bevor Sie den Wert auch erhalten, und ob die Daten tatsächlich gespeichert werden, bevor Sie versuchen, es zu bekommen.

JS Fiddle

function saveText() { 
    if (typeof(Storage) !== "undefined") { 
     localStorage.setItem("myData", "Hello, Rajesh!"); 
     alert('Data saved.'); 
    } else { 
     alert('Local storage not available'); 
    } 
} 

function getText() { 
    if (typeof(Storage) !== "undefined" && typeof(localStorage.getItem('myData')) !== "undefined") { 
     alert(localStorage.getItem('myData')); 
    } else { 
     alert('Local storage not available or the data is not saved.'); 
    } 
} 

Denken Sie daran, die scopes of the storage, können Sie es nur zwischen den Tabs/Fenster im gleichen Sub-Domain und/oder der Domäne verwenden.

+0

Vielen Dank #stamimir .. Es funktioniert jetzt .. –

2

Session Speicher ist nicht das geeignete Werkzeug für Ihre Aufgabe sollten Sie lokale Speicher Für sessionstorage verwenden werden, Änderungen pro Fenster nur zur Verfügung stehen (oder Tab in Browsern wie Chrome und Firefox)

in Ihrem Fall, dass Sie die Daten über verschiedene Registerkarten geteilt werden, so dass Sie etwas tun können:

if (typeof(Storage) !== "undefined") { 
    localStorage.setItem("firstname", "fady"); 
} else { 
    // Sorry! No Web Storage support.. 
} 

und dann können Sie es genau das gleiche Sie mit Ihrer Sitzung Speicher

var firstname = localStorage.getItem("firstname"); 
tat abrufen
+0

Ich hatte genau das getan. Zuerst habe ich versucht mit localStorage, wenn es nicht funktioniert, wechsle ich zu sessionStorage. Aber immer noch nicht funktioniert. Eigentlich bin ich verwirrt über den getItem-Kram. Soll ich var firstname = localStorage.getItem ("Vorname"); zu der anderen Projektdatei, wo ich die Daten holen möchte .. ?? –

+0

Ja, auf diese Weise können Sie die Daten hier abrufen, Sie können ein YouTube-Video finden, das erklärt, wie Sie es tun können https://www.youtube.com/watch?v=0CDi-CgflN4 –

+0

Vielen Dank für Ihre Rply, Aber ich überprüfte Es ist ein richtiger Weg. Wenn ich "setItem" und "getItem" in der gleichen Datei verwende, funktioniert es einwandfrei, funktioniert aber nicht auf anderen Tabs. Wenn ich eine andere Registerkarte öffne und localStorage für meine Konsole verwende, wird 0 length, null zurückgegeben. bitte hilfe. Ich benutze Chrom. –

Verwandte Themen