14

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

我正在通过 json 所在的角度执行 get() 请求:

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

有谁知道这意味着什么?

4

4 回答 4

32

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

  • 字符串(任何用引号括起来的文本)
  • 数组(一个“数组文字”,在[]
  • 对象(一个“对象文字”,在{}
  • 布尔值(truefalse,不包含在引号中)
  • 整数或数字(不包含在引号中)
  • null(不包含在引号中)

具体来说,SyntaxError: Unexpected token N通常是NaN在您的 JSON 中意外返回 a 的结果,尽管它可能只是其他一些未包装的字符串。NaN不是 JSON 中支持的值,也不是任何其他没有用引号括起来的文本,除了true,falsenull(和数字)。因此,尽管您的 JSON 样本中确实有两个nulls,但这应该不是问题。(错误中的“N”不是小写,因为它会在null.)

错误中出现大写字母“N”让我怀疑您不小心NaN在 JSON 输出中返回了某个位置,即使它不存在于您的示例中。样本中唯一的其他大写字母 N 被安全地包裹在引号中,并且无论如何都位于字符串的中间。

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

于 2013-11-01T18:07:18.113 回答
3

就我而言,使用 方法时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."
}
于 2016-07-07T05:25:51.883 回答
1

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

问题是我发送的 JSON 无效。(JSON 只是一个带有关联规范的字符串,可以跨不同的接口识别它)事实上,我只是发送了一个未使用 JSON 规范序列化(以正确格式放置)的字符串。我认为你也是如此。因此,错误来自您的后端。修复取决于您使用的后端。如果是java,我可以帮助你!

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

于 2015-09-26T11:00:39.207 回答
1

这也可能是由于

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

由php生成。

于 2015-09-08T08:53:14.730 回答