2014-04-22 8 views
17

Ho letto online che il problema del token inaspettato può derivare dall'utilizzo di JSON.parse(). Sul mio iPhone 5 non c'è nessun problema, tuttavia sul mio Nexus 7 ottengo questa sequenza di errori:Token inatteso: u JSON.parse() issue

enter image description here View large

Mi rendo conto che è un duplicato, ma io non sono sicuro di come risolvere questo per il mio problema specifico Qui è dove implemento JSON.parse()

$scope.fav = []; 

if ($scope.fav !== 'undefined') { 
    $scope.fav = JSON.parse(localStorage["fav"]); 
} 
+1

Direi che un buon primo passo sarebbe 'console.log (localStorage [" fav "])' e vediamo cosa ti dà sul Nexus – ivarni

+2

Puoi mostrare l'output di 'console.log (typeof localStorage [ "fav"]); 'e' console.log (tipo di JSON.stringify ($ scope.fav)); 'subito prima di' JSON.parse'. Non dovrebbe essere 'indefinito', ma probabilmente c'è un problema con' localStorage' (ad esempio che i dati sono troppo grandi) o con 'JSON.stringify'. Il 'Token inatteso u' indica che è' indefinito' –

+0

La funzione addToFav viene richiamata solo su un clic del pulsante. Questi pulsanti non vengono visualizzati sul Nexus, ma solo sull'iPhone. Dovrei vedere l'uscita lì? – benjipelletier

risposta

17

Base sulla tua domanda aggiornato la condizione if non ha senso, perché si imposta $scope.fav-[] destra prima, in modo che possa mai essere "undefined".

Molto probabilmente si desidera avere il test in questo modo:

if (typeof localStorage["fav"] !== "undefined") { 
    $scope.fav = JSON.parse(localStorage["fav"]); 
} 

come io non so se v'è una situazione in cui localStorage["fav"] potrebbe contenere la stringa "undefined" probabilmente bisogno anche di test per questo.

if (typeof localStorage["fav"] !== "undefined" 
    && localStorage["fav"] !== "undefined") { 
    $scope.fav = JSON.parse(localStorage["fav"]); 
} 
+0

Ciao, grazie. questa era la soluzione che stavo cercando. Faccio solo questo test per assicurarmi che se la favata avesse valori precedenti in essa, rimangono lì ad ogni carico. – benjipelletier

+0

Mi sono imbattuto in un bug simile con il mio codice. Il controllo per sia typeof "undefined" che stringa "undefined" era la mia soluzione. Determinare come è stato impostato "undefined" è un altro bug :) Grazie a tutti! – jjwdesign

10

Un modo per evitare l'errore (non proprio fissandola, ma almeno non si rompe):

$scope.fav = JSON.parse(localStorage["fav"] || '[]'); 

Stai diventando che errore perché localStorage["fav"] è undefined.

Prova questo e capirete tutto da soli:

var a = undefined; 
JSON.parse(a); 
+0

'if ($ scope.fav! == 'undefined')' è inutile, dato che $ scope.fav' non è mai ''undefined'' per il codice dato. Quindi rimuovilo e usa solo 'localStorage [" fav "] || '{}' 'o sposta il test sulla condizione' if'. –

+0

Beh, sto fissando una riga che si rompe, non il suo intero codice :) – avetisk

+0

Ma hai ragione, dovrei fornire un codice pulito come esempio. Cambio fatto :) – avetisk

4

Unexpected token: u quasi sempre deriva dal tentativo di analizzare un valore che è undefined.

È possibile evitare che in questo modo:

if (localStorage['fav']) { 
    $scope.fav = JSON.parse(localStorage['fav']; 
} 
0

Nel mio caso, il problema è stato mi è stato sempre il valore come localStorage.getItem[key] mentre avrebbe dovuto essere localStorage.getItem(key).

Il resto e problemi normalmente affrontati sono stati spiegati meglio già dalle risposte di cui sopra.