2016-05-24 16 views
10

quando sto provare a convertire la stringa di opporsi ottengo l'errore ``:imprevisto token di u in JSON alla posizione 0

Unexpected token u in JSON at position 0 

Servizio

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

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

Si prega di mostrare la stringa che si sta tentando di analizzare. –

+0

Potresti avere dataType: 'json', o responseType: 'json' nella tua chiamata http. E sembra che Angular non sia in grado di analizzarlo (dato che non è un formato JSON valido). Prova a rimuoverli. – sandiejat

risposta

9

La prima cosa da fare è guardare a quello che stai cercando di analizzare. La mia ipotesi è che troverai che è "undefined", che è JSON non valido. Stai ricevendo undefined perché non hai (ancora) salvato nulla su quella chiave nella memoria locale. undefined viene quindi convertito nella stringa "undefined" che non è possibile analizzare JSON.parse.

solito memorizzare e recuperare le cose in memoria locale come questo:

Memorizzazione (come la tua):

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

Recupero (questo è diverso):

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

In questo modo, sto sempre analizzando qualcosa di valido.

5

Si riceve questo errore perché non si restituisce la risposta come stringa JSON mentre il browser si aspetta una stringa JSON da analizzare. Quindi sta prendendo la prima lettera della stringa di risposta e genera un errore.

È possibile verificarlo accedendo alla scheda di rete degli strumenti Dev del browser e visualizzando la risposta.

Per risolvere questo problema, è possibile utilizzare il codice riportato di seguito nella richiesta http.

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

Spero che questo aiuti!

4

Anche stavo ottenendo lo stesso errore. Il problema era che la risposta che stavo ottenendo da HTTP Get Request non era in formato JSON, era invece testo normale.

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

Quindi, il parser JSON ha generato un errore.

Quando ho map in testo semplice come questo:

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

Funziona.

Problemi correlati