SyntaxError:angularjs的chrome控制台中出现意外的令牌N

SyntaxError: Unexpected token N in chrome console from angularjs

本文关键字:意外 令牌 控制台 angularjs chrome SyntaxError      更新时间:2023-09-26

嗨,我通过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

我正在通过angular执行一个get()请求,其中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"}]

有人知道这意味着什么吗?

任何SyntaxError: Unexpected token都意味着你有一些格式错误的JSON,它通常是一个没有引号的字符串。JSON中仅支持以下数据类型:

  • 字符串(任何用引号括起来的文本)
  • array("array literal",在[]中)
  • 对象("对象文字",在{}中)
  • 布尔值(truefalse,不包含在引号中)
  • 整数或数字(不带引号)
  • null(未用引号括起来)

具体来说,SyntaxError: Unexpected token N通常是意外地在JSON中返回NaN的结果,尽管它可能只是其他一些未包装的字符串。除了truefalsenull(以及数字)之外,JSON中不支持NaN,也不支持任何其他未用引号括起来的文本。因此,尽管您的JSON样本中确实有两个null,但这应该不是问题所在。(错误中的'N'不是小写的,就像在null中一样。)

错误中大写字母"N"的存在使我怀疑您在JSON输出中的某个地方意外返回了NaN,尽管它不在您的示例中。样本中唯一的其他大写-N被安全地包装在引号中,并且在任何情况下都位于字符串的中间。

关键是要确保您正确地清理服务器上的输出,并用零代替任何NaN值,或用引号括起来,等等。或者,您可以尝试在客户端上处理此类错误,但在源位置要容易得多,因此您可以在生成内容时使用条件逻辑,而不需要使用"脏JSON解析器"。(这有点像睡前在灯还亮的时候清理地板,你知道一切都在哪里,而不是需要在黑暗中检测和避开未知的障碍物。)

在我的例子中,json字符串,键(name, age, motto.)是而不是在使用CCD_ 17方法时用双引号装饰。

非正式

{
    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."
}

这也可能是的结果

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

由php生成。

我遇到了同样的问题,用了另一个字母而不是N。经过几次测试,我意识到这封信实际上是我发送的字符串的第一个字母(我以为它被转换成了JSON)!(在我的例子中,H代表"Hello World")。

问题是我发送的JSON无效。(JSON只是一个字符串,它有一个相关的规范,使它能够在不同的接口中被识别)事实上,我只是发送了一个没有用JSON规范序列化(以正确的格式)的字符串。我想你也是这样。所以,这个错误来自你的后端。修复取决于你使用的是哪个后端。如果是java,我可以帮你!

您可以尝试发送有效的JSON来替换您发送的数据{"id":1,"name":"test"},这是一个有效的JSON。在这种情况下,您的错误应该会消失,这证明您的JSON序列化是不对的。