2017-09-06 3 views
1

J'ai cherché pendant plusieurs heures, mais rien n'a résolu mon problème: impossible de vérifier si une clé existe dans le localStorage.Vérifier si l'élément localStorage existe ne fonctionne pas

Dans mon application de chat, Une fois que l'utilisateur ouvre un nouvel onglet, je veux vérifier s'il est déjà utilisateur enregistré, je le fais en utilisant la variable localStorage de la manière suivante:

window.addEventListener('load', function() { 
    var s=localStorage.getItem("localStor"); 
    if (s === null){ 
     console.log("is null"); //does not enter here 
    }else{ 
     console.log(s); // prints [object *O*bject] 
     console.log(JSON.parse(s).name); //getting an error (see below) 
    } 
}, false); 

Lors de l'analyse que je reçois l'erreur:

Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>)

le premier endroit où je mis localStor objet localStorage est qu'après l'enregistrement et il est dans une fonction qui est appelée uniquement lorsque vous cliquez sur un bouton élément HTML. Mais logiquement, il ne devrait pas entrer dans le else de la première place.

Une idée de pourquoi cela ne fonctionne pas? toute aide est appréciée.

+0

valider votre JSON et écrire tout cela dans 'try..watch' – vsync

+0

@vsync rien n'a changé, j'ai essayé d'alerter l'erreur mais rien ne s'est passé – user8244016

+0

Vous le faites correctement, comme mentionné ici: https: // stackoverflow. com/questions/3262605/comment-vérifier-si-un-élément-de-stockage-est- Je suppose qu'il y a quelque chose à propos de votre 'JSON.parse()' dans lequel la propriété 'name' n'est pas valide ... ou quelque chose comme ça. Essayez simplement de consigner le résultat de 'JSON.parse (s)' pour voir à quoi ressemble votre valeur. – Marc

Répondre

2

On dirait que vous avez oublié de sérialiser votre objet avant de stocker dans localStorage, vous devez utiliser

localStorage.setItem('localStor', JSON.stringify(yourObject)); 

cela devrait fonctionner comme prévu.

Comme il semble qu'il y ait un élément voyou dans votre localStorage, vous pouvez réinitialiser localStorage et essayez à nouveau:

localStorage.clear() 
+0

mon but n'est pas de définir un élément dans le stockage local, je ne peux pas vérifier si un élément existe dans le localStorage – user8244016

+0

Je comprends cela, mais le problème est que l'objet n'est pas défini dans 'localStorage' correctement, donc votre appel' JSON.parse() 'échoue. –

+0

il ne devrait pas entrer l'instruction else en premier lieu, je ne pose pas de questions sur l'erreur .. – user8244016

-1

Vous devez utiliser JSON.stringify pour sérialiser votre objet avant de le mettre dans le stockage local. Votre code a-t-il placé l'objet localStor dans le stockage local en premier lieu?

Si c'est le cas, lorsque vous faites cela, il doit être sérialisé avant d'être mis en place afin qu'il puisse ensuite être lu avec succès en utilisant JSON.parse.

Si localStorage.getItem ne renvoie pas de valeur NULL, la clé demandée est localStorage. Sa valeur de retour ne ment pas. Le fait demeure que vous récupérez un objet non sérialisé à partir du getter, vous devez donc déterminer où cet objet a été placé par erreur localStorage.

+0

mon but n'est pas de définir un élément dans le stockage local, je ne peux pas vérifier si un élément existe dans le localStorage – user8244016

+0

Votre code a-t-il mis l'objet 'localStor' là-bas en premier lieu? Si c'est le cas, lorsque vous faites cela, vous devez le sérialiser avant de le mettre afin qu'il puisse être lu avec succès en utilisant 'JSON.parse'. – hsotweelvl

+0

"Votre code a-t-il placé l'objet localStor là-dedans en premier lieu", Non, il ne le fait pas, s'il vous plaît relisez la question – user8244016