Chrome:未捕获的语法错误:输入意外结束

Chrome: Uncaught SyntaxError: Unexpected end of input

提问人:dlaurent86 提问时间:8/29/2010 最后编辑:Qix - MONICA WAS MISTREATEDdlaurent86 更新时间:9/15/2021 访问量:538733

问:

在 Google Chrome 中加载我的页面时,我在控制台中收到一个模糊的错误:

未捕获的语法错误:输入意外结束

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

调试 google-chrome 语法错误 v8

评论

3赞 tdammers 8/29/2010
在网络嗅探器中检查响应可能会为您提供线索。我的猜测是标头指定的字节数多于响应包含的字节数,或者服务器可能以某种方式发送了无效的 HTML。Content-length
4赞 OG Sean 7/26/2018
大多数时候缺少 } (javascript)。检查类和函数的末尾。尝试在脚本末尾添加另一个结束 },然后重新自动格式化代码。如果你的代码中有任何奇怪的缩进,那么在此之前的某个地方很可能是 } 丢失的地方。
0赞 Daniel Apt 9/11/2018
错误加载 JS 时遇到了这个问题。我加载了它,它应该是<script>https://example.com/a.js</script><script src="https://example.com/a.js"></script>
0赞 Teddy 4/29/2020
我今天在 Google 表格上收到此错误。我的猜测是他们的一个 JS 文件是如此之大,以至于它在没有完全加载的情况下就被终止了。或者他们的一个应用程序服务器有一个错误,并且在 JS 文件完全下载之前关闭了 http 连接。

答:

237赞 Ivo Wetzel 8/29/2010 #1

这个特殊的错误是关于 的一个令人讨厌的事实。在大多数情况下,你的 JavaScript 在某种程度上被破坏了。例如,缺少一个或类似的东西。}

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

eval('[{"test": 4}') // notice the missing ]

但问题的根本原因似乎是请求的 JSON url 有一个 Content-Type,Chrome 显然试图将其解析为 HTML,然后由于包含的图像标签正在被解析,这会导致输入意外结束。text/html

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

尽管如此,V8 可以做得更好,准确地告诉人们输入意外结束的位置

评论

3赞 dlaurent86 8/29/2010
好的,非常感谢,我一起删除了 json 请求,错误消失了,我还没有弄清楚我的 json 请求到底出了什么问题。我只是不知道从哪里开始调试。如果我可以问你是如何确定根本原因的
2赞 Cerin 1/9/2014
这可能没有那么明显。我在缩小的 JS 上遇到了这个错误,因为它被最小化器破坏了,而未缩小的 JS 是完全合法和有效的。不幸的是,Chrome 只显示发生错误的行,对于最小化的 JS,通常是整个文件......
0赞 AndrewS 6/10/2014
与其说是输入结束的地方(是因为那是在最后)。相反,知道预期的结果会有所帮助。
0赞 Cyprus106 8/20/2014
救了我的尾巴。我对这种模棱两可感到非常恼火。谢谢。
4赞 A Khudairy 2/25/2015
我遇到了同样的错误,因为我使用的是JSON.parse(text)并且文本值为空字符串
10赞 HBP 8/29/2010 #2

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

78赞 user669677 7/22/2011 #3

尝试 Firebug for Mozilla - 它将显示丢失的位置。}

http://getfirebug.com/

评论

17赞 Dylan Valade 4/3/2013
不需要Firebug。Firefox中的控制台确切地告诉我缺少哪一行和什么字符
1赞 Benjamin Crouzier 10/15/2013
也不需要火熏火虫。firefox控制台会告诉你。ctrl+shift+i
2赞 Cerin 1/9/2014
警告,如果脚本被最小化到一大行,预计 Firefox 会挂起几分钟/几小时/几年。
1赞 BentOnCoding 8/29/2014
这是迄今为止跟踪这些语法错误的最简单方法
0赞 Isaiah Lee 6/18/2015
我的上帝,谢谢你。我觉得 Chrome 在开发者工具方面远远领先于 Firefox。令人惊讶的是,它未能正确地完成这件小事。把我从大头痛中解救出来!
10赞 DroidOS 6/12/2013 #4

作为记录,对于任何试图找到此错误的各种原因的人。空的 HTML5 数据属性

data-mydata = ''

也会导致错误。当数据值为 null 字符串时,应检查该值,并且根本不包含该属性。不言而喻,这在很大程度上与脚本生成的 HTML 有关。

评论

0赞 Tyler Buchea 3/9/2015
没有你,永远不会弄清楚这一点。我正在使用 VideoJS,我从他们的页面复制了他们的视频播放器的 html。它有一个数据属性占位符,你可以使用,但我没有。视频没有加载,我得到了每个人都在谈论的错误。删除后,一切都很好。data-setup='{"example_option":true}'
8赞 Blaskovicz 2/15/2014 #5

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

评论

0赞 Dustin Poissant 3/15/2015
我启动了一个ajax请求(上传)并在它完成之前中止了它,我得到了这个错误。
7赞 Harfatum 10/4/2014 #6

JSHint 擅长查找缺少括号或语法错误的位置。

34赞 falsarella 5/31/2015 #7

请参阅我在另一个类似问题上的案例

就我而言,我试图解析一个空的 JSON:

JSON.parse(stringifiedJSON);

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

JSON.parse("");

评论

2赞 cronoklee 6/23/2015
是的,我也有这个!您可以通过提供“{}”而不是空字符串来轻松解决
1赞 jpierson 11/22/2015
由于 URL 中的双正斜杠(例如 localhost:8080//mypath/blagh),我收到了空的 json,并且服务器为此返回了一个空响应。
1赞 Luís Assunção 3/16/2016
我来这里只是为了确认这个解决方案。
3赞 Manoj Dhiman 7/1/2015 #8

肯定会有一个打开的括号导致错误。

我建议您在Firefox中打开该页面,然后打开Firebug并检查控制台 - 它将显示缺少的符号。

屏幕截图示例:

Firebug highlighting the error

6赞 Andrew 4/22/2016 #9

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

0赞 OlehZiniak 7/18/2016 #10

当按 am/pm 切换时,我使用 angularjs 的 ui bootstrap 指令 - uib-datepicker 遇到了类似的问题。

事件处理程序中的错误(未知):SyntaxError:意外结束 JSON input angular timepicker

原来这是因为插件“Trans-over”(点击时会翻译一个单词)。也许我的回答会对某人有所帮助,因为我在互联网上没有找到任何东西。

0赞 safhac 12/2/2016 #11

由于这是一个异步操作,因此可能会在值加载到 responseText 中之前发生,请尝试使用 a 查看错误是否仍然存在?提货单onreadystatechangewindow.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);

3赞 Amir 4/28/2018 #12

我的问题是谷歌浏览器缓存。我通过在Firefox上运行我的Web应用程序来测试这一点,并且没有出现该错误。因此,我决定尝试清空Google Chrome浏览器的缓存,并且它起作用了。

0赞 Brick 7/6/2018 #13

我遇到了这个错误,并通过添加防护装置来修复它,如下所示:readyStatestatus

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};
1赞 Johan Doe 2/8/2019 #14

如果您的 JavaScript 代码被缩小到一行,则导致此错误的另一个原因是使用而不是您的注释。///**/

不好(在包含函数的关闭后注释掉所有内容)//}

function example() { //comment console.log('TEST'); }

好(限制您的评论)

function example() { /* comment */ console.log('TEST'); }

评论

0赞 Bay 9/17/2019
工作了,另外,你应该使用“the-text”作为“the-text”的代号,也用于投射。
0赞 Harsha Annareddy 3/27/2019 #15

如果您在锚标记上遇到错误,只需将“Onclick”替换为“href”或将“href”替换为“Onclick”

0赞 Stefano Populin 5/23/2019 #16

当我遇到同样的问题时,在请求中设置标头对我有用。Acceptapplication/json

1赞 George_kane 10/4/2019 #17

就我而言,我动态添加 javascript 并在字符串模板中使用双引号 2 次,所以我将第二个引号更改为单引号,错误就消失了。 我希望它能帮助一些出于同样原因来到这里的人。

评论

0赞 tfa 4/24/2020
使用 addthis,我用双字符串附加到 url,然后更改为单引号,控制台错误消失了
1赞 rivelbab 12/13/2019 #18

尝试解析空 JSON 可能是导致此错误的原因。

当您收到来自服务器或其他设备的响应时,请先检查它是否不为空。例如:

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

然后你可以用以下命令获取:

fetch(url, options).then(parseJSON); 
0赞 Shahid Islam 8/11/2020 #19

就我而言,我的互联网速度很低,当我关闭其他用户的互联网连接时,错误就消失了,很奇怪

1赞 Sergey V. 9/15/2021 #20

此错误的原因之一可能是网络基础结构。我使用 Cloudflare 的 Web 代理服务遇到了这个问题。一旦我禁用代理并清除浏览器缓存,它就开始工作。因此,也要检查网络组件的状态。就我而言,它是在 Cloudflare 状态页面上传达的 enter image description here