2013-08-06 13 views
12

Hi otrzymuję ten błąd przy użyciu angularjs za pośrednictwem konsoli chrome:SyntaxError: Nieoczekiwany token N w konsoli Chrome angularjs

SyntaxError: Unexpected token N 
    at Object.parse (native) 
    at fromJson (http://localhost:3000/assets/angular.js?body=1:803:14) 
    at $HttpProvider.defaults.defaults.transformResponse  
http://localhost:3000/assets/angular.js?body=1:9471:18) 
    at http://localhost:3000/assets/angular.js?body=1:9446:12 
    at Array.forEach (native) 
    at forEach (http://localhost:3000/assets/angular.js?body=1:149:11) 
    at transformData (http://localhost:3000/assets/angular.js?body=1:9445:3) 
    at transformResponse (http://localhost:3000/assets/angular.js?body=1:10061:17) 
    at wrappedCallback (http://localhost:3000/assets/angular.js?body=1:7510:59) 
    at http://localhost:3000/assets/angular.js?body=1:7583:26 angular.js?body=1:6350 
(anonymous function) angular.js?body=1:6350 
(anonymous function) angular.js?body=1:5421 
wrappedCallback angular.js?body=1:7512 
(anonymous function) angular.js?body=1:7583 
Scope.$eval angular.js?body=1:8927 
Scope.$digest angular.js?body=1:8790 
Scope.$apply angular.js?body=1:9013 
done angular.js?body=1:10266 
completeRequest angular.js?body=1:10450 
xhr.onreadystatechange 

robie żądania get() przez kątowy gdzie json jest:

[{"_id":"51f96144c885552bda000015","company_id":"51f82116c88555bf48000004","description":"ENGINEER FOR BEST COMPANY", 
"industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9556424,40.4379259],"location_state":"PA","location_zip":"15213","name":"Engineer "}, 
{"_id":"51f972a5c885552bda000026","company_id":"51f82116c88555bf48000004","description":"has to do everything","industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9418166,40.4443735],"location_state":"PA","location_zip":"15289","name":"job #2"}] 

Czy ktoś wie, co to oznacza?

+1

Jak ty generowania JSON? Wydaje się być zniekształcony. – Blender

+1

wygląda jak mongodb json – ryudice

+1

tak, jego monsonb json dla mojej aplikacji rails –

Odpowiedz

26

Dowolny SyntaxError: Unexpected token oznacza, że ​​masz źle sformułowany JSON, który jest zwykle ciągiem, który nie jest zawijany w cudzysłowy. Tylko po to supported data-types w JSON:

  • ciąg (dowolny tekst zawinięty w cudzysłowach)
  • array (an 'tablica dosłowny', w [])
  • obiekt (an 'object dosłowny', w {})
  • logiczna (true lub false nie owinięty w cudzysłowach)
  • liczby całkowite lub nie owinięty (w cudzysłowach)
  • puste (nie owinięty w quot es)

szczególności SyntaxError: Unexpected token N jest często wynikiem przypadkowo przekazujących NaN w swoim JSON, chociaż może to być po prostu jakiś inny ciąg rozpakowany. NaN nie jest obsługiwaną wartością w JSON, ani żadnym innym tekstem, który nie jest zawijany w cudzysłów, z wyjątkiem true, false i null (i liczb). Tak więc, chociaż rzeczywiście masz dwie próbki JSON, to nie powinno być problemu. (Twój „N” w błąd nie jest małe, jak byłoby w null.)

Obecność tego literą „N” w błąd sprawia, że ​​podejrzewam, że zostały przypadkowo przekazujących NaN gdzieś w Wynik JSON, nawet jeśli nie ma go w twojej próbce. Jedyne inne N-ki, które masz w swojej próbce, są bezpiecznie zawijane w cudzysłów i są w środku łańcucha w każdym przypadku.

Kluczem jest upewnienie się, że prawidłowo oczyszczasz swoje wyniki na serwerze i zastępujesz zero wartościami NaN, zawijaniem w cudzysłowach itp. Alternatywnie, możesz spróbować poradzić sobie z takimi błędami na kliencie , ale w miejscu pochodzenia jest znacznie łatwiej, więc możesz użyć logiki warunkowej, w której generowana jest treść, zamiast używać "brudnego parsera JSON". (To trochę jak różnica między oczyszczeniem podłogi przed snem, gdy światła są włączone, a wiesz, gdzie wszystko jest, zamiast konieczności wykrywania i unikania nieznanych przeszkód w ciemności.)

1

Może to być również Wynik:

Notice: Undefined index: project_id in /var/www/html/ 

generowany przez php.

+0

Doskonały punkt. Lub, bardziej ogólnie, możemy powiedzieć, że może to być spowodowane przez nieprzechwycony błąd podłączony bezpośrednio do wyjścia bez sanityzacji. – XML

1

Miałem ten sam problem, z inną literą zamiast N. Po kilku testach, zdałem sobie sprawę, że ten list był w rzeczywistości pierwszą literą ciągu (który myślałem, że został przekonwertowany na JSON), który wysyłałem! (w moim przypadku H w "Hello World").

Problem polegał na tym, że wysłany JSON nie był prawidłowy.(JSON jest po prostu ciągiem z powiązaną z nim normą, która umożliwia jego rozpoznawanie na różnych interfejsach). W rzeczywistości właśnie wysyłałem ciąg, który nie był serializowany (umieszczany we właściwym formacie) z normą JSON. Myślę, że tak też jest w twoim przypadku. A więc błąd pochodzi z twojego back-end. Poprawka zależy od tego, z którego backendu korzystasz. Mogę ci pomóc, jeśli to java!

Możesz spróbować wysłać prawidłowy JSON zastępując dane wysyłane przez {"id": 1, "name": "test"}, który jest prawidłowym JSON. Twój błąd powinien zniknąć w tej sprawie, co dowodzi, że serializacja JSON nie jest właściwa.

1

W moim przypadku ciąg json to , a nie w dobrym formacie przy użyciu metody JSON.parse().

nieformalny:

{ 
    name: "Jhon Brown", 
    age: 30, 
    motto: "Please, choose good." 
} 

będzie produkować błąd jak: SyntaxError: Unexpected token n at Object.parse (native)

formalnego:

{ 
    "name": "Jhon Brwon", 
    "age": 30, 
    "motto": "Please, choose good." 
} 
Powiązane problemy