2016-05-24 26 views
10

kiedy mam spróbować przekonwertować ciąg do obiektu otrzymuję błąd ``:Nieoczekiwany token uw JSON w pozycji 0

Unexpected token u in JSON at position 0 

usługi

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

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

Proszę pokazać ciąg znaków, który próbujesz analizować. –

+0

Możesz mieć dataType: 'json' lub responseType: 'json' w twoim wywołaniu http. I wygląda na to, że Angular nie może go przetworzyć (ponieważ nie jest to prawidłowy format JSON). Spróbuj je usunąć. – sandiejat

Odpowiedz

9

Pierwszą rzeczą do zrobienia jest patrzeć przy tym, co próbujesz analizować. Domyślam się, że jest to "undefined", który jest nieprawidłowy JSON. Dostajesz undefined, ponieważ nie zapisałeś (jeszcze) niczego w tym kluczu w pamięci lokalnej. undefined jest następnie konwertowany na ciąg "undefined", którego nie można przeanalizować pod JSON.parse.

zwykle przechowywania i pobierania rzeczy w pamięci lokalnej tak:

Przechowywanie (podobnie jak Twoja):

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

Odzyskiwanie (jest różny):

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

W ten sposób zawsze parsuję coś ważnego.

5

Otrzymujesz ten błąd, ponieważ nie zwracasz odpowiedzi jako ciąg JSON, podczas gdy przeglądarka oczekuje, że ciąg znaków JSON zostanie przeanalizowany. Dlatego bierze pierwszą literę ciągu odpowiedzi i rzuca błąd.

Możesz to sprawdzić, przechodząc do karty sieci narzędzi przeglądarki przeglądarki i wyświetlając odpowiedź.

Aby rozwiązać ten problem, możesz użyć poniższego kodu w swoim żądaniu http.

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

Mam nadzieję, że to pomoże!

4

Otrzymałem również ten sam błąd. Problem polegał na tym, że odpowiedź otrzymana z żądania HTTP Get Request nie była w formacie JSON, zamiast tego była to zwykły tekst.

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

Parser JSON rzucił więc błąd.

Kiedy map go do zwykłego tekstu tak:

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

To działa.

Powiązane problemy