2014-04-22 7 views
17

Ich habe online gelesen, dass das unerwartete Token u-Problem von der Verwendung von JSON.parse() kommen kann. Auf meinem iPhone 5 gibt es kein Problem, aber auf meinem Nexus 7 bekomme ich diese Folge von Fehlern:Unerwartete Token: u JSON.parse() Problem

enter image description here View large

Ich weiß, das ein Duplikat ist, aber ich bin nicht sicher, wie dieses Problem zu lösen für meine spezifisches Problem. Hier ist, wo ich JSON.parse()

$scope.fav = []; 

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

Ich würde sagen, ein guter erster Schritt wäre 'console.log (localStorage [" fav "])' und sehen, was das auf dem Nexus gibt – ivarni

+2

Könnten Sie die Ausgabe von 'console.log (typeof localStorage [ "fav"]); 'und' console.log (typeof JSON.stringify ($ scope.fav))); 'direkt vor Ihrer' JSON.parse'. Es sollte nicht "undefiniert" sein, aber wahrscheinlich gibt es ein Problem entweder mit dem 'localStorage' (z. B. dass die Daten zu groß sind) oder mit dem' JSON.stringify'. Das 'Unexpected token u 'zeigt an, dass es' undefiniert 'ist. –

+0

Die Funktion addToFav wird nur bei einem Klick aufgerufen. Diese Schaltflächen werden nicht auf dem Nexus angezeigt, sondern nur auf dem iPhone. Soll ich die Ausgabe dort sehen? – benjipelletier

Antwort

17

Base auf die aktualisierte Frage der if Zustand ist nicht sinnvoll, da Sie $scope.fav-[] Recht vor gesetzt, so kann es nie "undefined" sein.

Wahrscheinlich möchten Sie Ihren Test, so haben:

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

Wie ich weiß nicht, ob es eine Situation, wo localStorage["fav"] die Zeichenfolge enthalten könnte "undefined" Sie wahrscheinlich auch Test für diese benötigen.

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

Hallo, danke. Das war die Lösung, nach der ich suchte. Ich mache nur diesen Test, um sicherzustellen, dass, wenn fav vorhergehende Werte in ihm hatte, sie bei jedem Ladevorgang dort bleiben. – benjipelletier

+0

Ich bin gerade auf einen ähnlichen Fehler mit meinem Code gestoßen. Die Suche nach dem Typ "undefiniert" und dem String "undefiniert" war meine Lösung. Zu bestimmen, wie "undefined" eingestellt wurde, ist ein weiterer Fehler :) Danke t.niese! – jjwdesign

10

Eine Möglichkeit zu implementieren, um die Fehler zu vermeiden (nicht wirklich Festsetzung es, zumindest aber nicht brechen):

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

Sie bekommen, dass Fehler, weil localStorage["fav"]undefined ist.

die Sie interessieren, und Sie werden alle von selbst verstehen:

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

'if ($ scope.fav! == 'undefined')' ist nutzlos, da '$ scope.fav' niemals '' undefiniert ''für den gegebenen Code ist. Also entferne es und benutze nur 'localStorage [" fav "] || '{}' 'oder verschieben Sie den Test in die 'if'-Bedingung. –

+0

Nun, ich korrigiere gerade eine Zeile, die bricht, nicht sein ganzer Code :) – avetisk

+0

Aber du hast Recht, ich sollte einen sauberen Code als ein Beispiel zur Verfügung stellen. Änderung erfolgt :) – avetisk

4

Unexpected token: u fast stammt immer von dem Versuch, einen Wert zu analysieren, die undefined ist.

Sie können, dass Schutz vor wie folgt aus:

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

In meinem Fall war das Problem, das ich den Wert als localStorage.getItem[key] wurde immer während es localStorage.getItem(key) hätte sein sollen.

Die übrigen und normalerweise auftretenden Probleme wurden bereits durch die obigen Antworten besser erklärt.

Verwandte Themen