quand j'essaie de convertir une chaîne en objet, j'obtiens l'erreur ``:
Unexpected token u in JSON at position 0
Un service
setUser : function(aUser){
//sauvegarder User
localStorage.setItem('User', JSON.stringify(aUser));
},
getUser : function(){
//récuperer User
return JSON.parse(localStorage.getItem('User'));
}
La première chose à faire est de regarder ce que vous essayez d'analyser. À mon avis, vous constaterez que c'est "undefined"
, qui est un JSON invalide. Vous obtenez undefined
parce que vous n'avez encore rien enregistré dans cette clé dans le stockage local. undefined
est ensuite converti en chaîne "undefined"
lequel JSON.parse
ne peut pas analyser.
J'ai l'habitude de stocker et de récupérer des choses dans un stockage local comme ceci:
Stockage (comme le vôtre):
localStorage.setItem("key", JSON.stringify(thing));
Récupération (c'est différent):
thing = JSON.parse(localStorage.getItem("key") || "null");
if (!thing) {
// There wasn't one, do whatever is appropriate
}
De cette façon, je suis toujours en train d'analyser quelque chose de valide.
Vous obtenez cette erreur car vous ne retournez pas la réponse sous forme de chaîne JSON alors que votre navigateur s'attend à une chaîne JSON à analyser. Par conséquent, il prend la première lettre de votre chaîne de réponse et génère une erreur.
Vous pouvez le vérifier en accédant à l'onglet Réseau des outils de développement de votre navigateur et en consultant la réponse.
Pour résoudre ce problème, vous pouvez utiliser le code ci-dessous dans votre demande http.
var promiz = $http.post(url, data, {
transformRequest: angular.identity,
transformResponse: angular.identity,
headers: {
'Content-Type': undefined
}
});
J'espère que cela t'aides!
J'avais aussi la même erreur. Le problème était que la réponse que je recevais de HTTP Get Request n'était pas au format JSON, mais que c'était du texte brut.
this.BASE_URL = "my URL";
public getDocument() {
return this.http.get(this.BASE_URL)
.map((res: Response) => res.json())
.catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
Ainsi, l’analyseur JSON a généré une erreur.
Quand je mappe en texte brut comme ceci:
.map((res: Response) => res.text());
Ça marche.