Chrome:Uncaught SyntaxError:意外的输入结束

dla*_*t86 169 debugging google-chrome syntax-error

在Google Chrome中加载我的网页时,我在控制台中出现了一个模糊的错误:

未捕获的SyntaxError:意外的输入结束

我不知道是什么原因造成的.我该如何调试此错误?

Ivo*_*zel 219

这个特殊错误是关于一个令人讨厌的事实.在大多数情况下,您的JavaScript会以某种方式被破坏.例如,缺少a }或类似的东西.

给出示例,这将产生"意外的输入结束":

eval('[{"test": 4}') // notice the missing ]
Run Code Online (Sandbox Code Playgroud)

但问题的根源似乎是被请求的JSON的URL有内容类型text/html的Chrome显然试图解析为HTML,然后导致输入意外结束由于所包括的图像标签是解析.

尝试将Content-Type设置为text/plain我认为它应该解决问题.

尽管如此,V8可以做一个更好的工作,告诉一个输入意外结束的确切位置.

  • 我有同样的错误,因为我使用的是JSON.parse(文本),文本值为空字符串 (4认同)
  • 好的非常感谢我一起删除了json请求并且错误消失了我还没弄清楚我的json请求究竟出了什么问题.我根本不知道从哪里开始调试.如果我可以问你是如何确定根本原因的 (2认同)
  • 它可能不那么明显.我已经在缩小的JS上得到了这个错误,因为它被最小化器破坏了,而未经证实的JS是完全合法且有效的.不幸的是,Chrome只显示发生错误的行,这对于最小化的JS通常是整个文件...... (2认同)

小智 72

尝试使用Firebug for Mozilla - 它将显示失踪的位置}.

http://getfirebug.com/

  • 不需要Firebug.Firefox中的控制台告诉我究竟是什么行以及缺少什么字符 (11认同)
  • 警告,如果脚本被最小化为一行,Firefox 将挂起几分钟/几小时/几年。 (2认同)

fal*_*lla 32

在另一个类似问题上看我的案例:

在我的例子中,我试图解析一个空的JSON:

JSON.parse(stringifiedJSON);
Run Code Online (Sandbox Code Playgroud)

换句话说,发生的事情如下:

JSON.parse("");
Run Code Online (Sandbox Code Playgroud)

  • 是的,我也有这个!您可以通过提供“ {}”而不是空字符串来轻松解决 (2认同)

HBP*_*HBP 10

当我}在JavaScript代码中省略了一个右括号字符()时,我收到此错误.检查你的牙套是否正确平衡.


Dro*_*dOS 10

对于记录,任何人试图找到导致此错误的各种原因.一个空的HTML5数据属性

data-mydata = ''
Run Code Online (Sandbox Code Playgroud)

导致错误.您应该检查数据值何时为空字符串,并且根本不包括该属性.毫无疑问,这与脚本生成的HTML有很大关系.


Bla*_*icz 8

对我来说,问题是我正在dataType: "json"为一个POST请求执行$ .ajax,该请求返回HTTP 201(已创建)且没有请求正文.修复是简单地删除该键/值.


小智 6

JSHint善于找到丢失括号或错误语法的位置.


And*_*rew 5

此错误的另一个原因是:如果您的API故意响应没有响应正文,但使用200 OK状态代码而不是状态代码进行响应204 No Content.当没有内容时,某些JavaScript库可能无法很好地响应意外的内容类型,因此请使用正确的状态代码!