SyntaxError: Неожиданный токен N в хром-консоли от 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

Я делаю запрос get() через angular, где json:

[{"_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"}]

Кто-нибудь знает, что это значит?

Ответ 1

Любой SyntaxError: Unexpected token означает, что у вас есть некорректный JSON, который обычно является строкой, которая не завернута в кавычки. В JSON доступны только следующие поддерживаемые типы данных:

  • строка (любой текст, заключенный в кавычки)
  • массив ( "массив литерала", в [])
  • object ( "литерал объекта", в {})
  • boolean (true или false, не завернутый в кавычки)
  • целые числа или числа (не заключенные в кавычки)
  • null (не завернутый в кавычки)

В частности, SyntaxError: Unexpected token N часто является результатом случайного возврата NaN в ваш JSON, хотя это может быть просто какая-то другая развернутая строка. NaN не является поддерживаемым значением в JSON, равно как и другим текстом, который не заключен в кавычки, кроме true, false и null (и цифр). Итак, хотя у вас действительно есть два null в вашем примере JSON, это не должно быть проблемой. (Ваш "N" в ошибке не строчный, как это было бы в null.)

Наличие этой заглавной буквы "N" в ошибке заставляет меня подозревать, что вы случайно возвращали NaN где-то на выходе JSON, даже если он не присутствует в вашем примере. Единственный другой капитал-N, который у вас есть в вашем примере, безопасно завернут в кавычки и в любом случае находится в середине строки.

Ключ должен убедиться, что вы правильно дезактивируете свои выходы на сервере и подставляете нуль для любых значений NaN или обертываете кавычки и т.д. В качестве альтернативы вы можете попытаться справиться с такими ошибками на клиент, но это намного проще в точке происхождения, поэтому вы можете использовать условную логику, где создается контент, вместо того, чтобы использовать "грязный парсер JSON". (Это похоже на разницу между очисткой пола перед сном, пока свет еще включен, и вы знаете, где все, а не нужно обнаруживать и избегать неизвестных препятствий в темноте.)

Ответ 2

Это также может быть результатом

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

сгенерированный php.

Ответ 3

У меня была та же проблема, с другой буквой вместо N. После нескольких тестов я понял, что это письмо на самом деле является первой буквой строки (которая, как я думал, была преобразована в JSON), которую я отправлял! (в моем случае H для "Hello World" ).

Проблема заключалась в том, что отправленный JSON недействителен. (JSON - это просто строка с ассоциированной с ней нормой, которая позволяет распознавать ее через разные интерфейсы) Фактически, я просто отправлял строку, которая не была сериализована (помещена в правильном формате) с нормой JSON. Который, я думаю, также относится к вам. Таким образом, ошибка возникает из вашего back-end. Исправление зависит от того, какой бэкэнд вы используете. Я могу помочь вам, если это java!

Вы можете попробовать отправить действительный JSON, заменяющий данные, которые вы отправляете { "id": 1, "name": "test" }, который является действительным JSON. Ваша ошибка должна исчезнуть в этом случае, и это доказывает, что ваша сериализация JSON неверна.

Ответ 4

В моем случае строка json не в хорошем формате при использовании метода JSON.parse().

неофициальный:

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

приведет к ошибке: SyntaxError: Unexpected token n at Object.parse (native)

формальный

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