Hvordan får jeg en JS-variabel til å beholde verdien etter at siden er oppdatert?
Er det mulig å endre en javascript-variabel permanent? Hvis jeg for eksempel setter variabelen X og gjør den lik 1. Når jeg så klikker på en knapp, endres variabelen til 2. Hvordan kan jeg få variabelen til å forbli 2 når siden oppdateres?
115
3
Dette er mulig med
window.localStorage
ellerwindow.sessionStorage
. Forskjellen er atsessionStorage
varer så lenge nettleseren er åpen, menslocalStorage
overlever etter at nettleseren startes på nytt. Persistensen gjelder for hele nettstedet, ikke bare en enkelt side av det.Bruk
localStorage
når du skal angi en variabel som skal gjenspeiles på neste side(r):Og på en hvilken som helst side (f.eks. når siden er lastet inn), gjør du det slik:
.getItem()
returnerernull
hvis ingen verdi er lagret, eller den lagrede verdien.Merk at kun strengverdier kan lagres i dette lageret, men dette kan løses ved å bruke
JSON.stringify
ogJSON.parse
. Teknisk sett, når du kaller.setItem()
, vil den kalle.toString()
på verdien og lagre den.MDN's DOM-lagringsguide (lenket nedenfor), har løsninger/polyfills, som ender opp med å falle tilbake til ting som informasjonskapsler, hvis
localStorage
ikke er tilgjengelig.Det ville ikke være en dårlig idé å bruke et eksisterende, eller lage ditt eget minibibliotek, som abstraherer muligheten til å lagre en hvilken som helst datatype (som objektbokstaver, matriser osv.).
**Referanser
Storage
- https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/StoragelocalStorage
- https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorageJSON
- https://developer.mozilla.org/en-US/docs/JSONDu må bruke en informasjonskapsel for å lagre verdien på tvers av sideoppdateringer. Du kan bruke et av de mange javascript-baserte informasjonskapselbibliotekene for å forenkle tilgangen til informasjonskapsler, som dette.
Hvis du bare vil støtte html5, kan du tenke på Storage api som localStorage/sessionStorage.
Eks: ved hjelp av localStorage og cookies library.
Det kan du gjøre ved å lagre informasjonskapsler på klientsiden.