2016-05-24 6 views
10

, wenn ich versuche, Zeichenfolge zu konvertieren wir Fehler bekommen Objekt ``:unerwartet Token u in JSON an Position 0

Unexpected token u in JSON at position 0 

Dienst

setUser : function(aUser){ 
    //sauvegarder User  
    localStorage.setItem('User', JSON.stringify(aUser)); 
}, 

getUser : function(){ 
    //récuperer User  
    return JSON.parse(localStorage.getItem('User')); 
} 
+0

Bitte zeigen Sie die Zeichenfolge, die Sie analysieren möchten. –

+0

Sie könnten dataType: 'json' oder responseType: 'json' in Ihrem http-Aufruf haben. Und es scheint, dass Angular es nicht parsen kann (da es kein gültiges JSON-Format ist). Versuche sie zu entfernen. – sandiejat

Antwort

9

Das erste, was zu tun, um zu sehen ist was du versuchst zu analysieren. Meine Vermutung ist, dass Sie es "undefined" finden, das ungültige JSON ist. Sie erhalten undefined, weil Sie (noch) nichts im lokalen Speicher gespeichert haben. undefined wird dann in die Zeichenfolge "undefined" konvertiert, die JSON.parse nicht analysieren kann.

ich in der Regel speichern und Dinge im lokalen Speicher wie folgt abrufen:

Speicher (wie Sie):

localStorage.setItem("key", JSON.stringify(thing)); 

Suchen (dies ist anders):

thing = JSON.parse(localStorage.getItem("key") || "null"); 
if (!thing) { 
    // There wasn't one, do whatever is appropriate 
} 

Auf diese Weise analysiere ich immer etwas Gültiges.

5

Sie erhalten diesen Fehler, weil Sie die Antwort nicht als JSON-Zeichenfolge zurückgeben, während Ihr Browser eine JSON-Zeichenfolge zum Parsen erwartet. Daher nimmt es den ersten Buchstaben Ihrer Antwortzeichenfolge und wirft einen Fehler.

Sie können es überprüfen, indem Sie auf die Netzwerkregisterkarte der Dev-Tools Ihres Browsers gehen und die Antwort anzeigen.

Um dieses Problem zu beheben, können Sie den folgenden Code in Ihrer HTTP-Anfrage verwenden.

var promiz = $http.post(url, data, { 
     transformRequest: angular.identity, 
     transformResponse: angular.identity, 
     headers: { 
     'Content-Type': undefined 
     } 
    }); 

Hoffe, das hilft!

4

Ich bekam auch den gleichen Fehler. Das Problem war, dass die Antwort von HTTP Get Request nicht im JSON-Format war, sondern reiner Text.

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')); 
} 

Also, der JSON-Parser warf einen Fehler.

Wenn ich wo es in Klartext wie folgt aus:

.map((res: Response) => res.text()); 

Es funktioniert.

Verwandte Themen