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

在谷歌浏览器中加载页面时,我在控制台中得到一个模糊的错误:

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

我不知道是什么导致了这个错误,我该如何调试这个错误呢?

530751 次浏览

这个特殊的错误是关于 的一个恼人的事实。在大多数情况下,您的 JavaScript 在某些方面出现了故障。例如缺少一个 }或类似的东西。

例如,这也会产生“意外的输入结束”:

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

但是问题的根本原因似乎是被请求的 JSON URL 有一个 text/html内容类别,Chrome 显然试图将其解析为 HTML,然后由于所包含的图像标记正在被解析,导致意外的输入结束。

尝试设置 内容类别text/plain我认为它应该修复的问题。

尽管如此,V8可以更好地告诉人们 在哪里的输入意外结束。

当我在 JavaScript 代码中省略了一个结束括号字符(})时,就会出现这个错误。 检查你的大括号是否平衡。

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

Http://getfirebug.com/

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

data-mydata = ''

也导致了错误。您应该检查数据值是否为空字符串,并且根本不包括该属性。不用说,这在很大程度上与脚本生成的 HTML 相关。

对我来说,问题是我正在做 $。对于返回 HTTP201(已创建)且没有请求正文的 POST 请求,使用 ajax 和 dataType: "json"。修复方法是简单地删除键/值。

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

参见另一个 类似的问题上的 我的案子:

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

JSON.parse(stringifiedJSON);

换句话说,事情是这样的:

JSON.parse("");

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

我建议你在 Firefox 中打开这个页面,然后打开 Firebug 并检查控制台——它会显示缺少的符号。

示例截图:

Firebug highlighting the error

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

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

事件处理程序中的错误(未知) : SyntaxError: 意外结束 输入角度计时器

原来这是因为插件 跨越(单击时翻译一个单词)。也许我的答案能帮到别人,因为我在网上什么都没找到。

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

我的问题是谷歌浏览器缓存。我通过在 Firefox 上运行我的 web 应用程序来测试这个问题,并没有得到这个错误。所以我决定尝试清空谷歌浏览器的缓存,它起作用了。

我有这个错误,并通过在 readyStatestatus上添加保护来修复它,如下所示:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Your code here
}
};

在 JavaScript 代码缩小到一行的情况下,出现此错误的另一个原因是对注释使用 //而不是 /**/

Bad (注释掉 //之后的所有内容,包括函数的关闭 })

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

好(限制你的评论)

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

如果你在 Anchor 标签出错了,只要把“ Onclick”换成“ href”或者“ href”换成“ Onclick”

当我遇到同样的问题时,在请求中将 Accept头设置为 application/json对我来说是有效的。

在我的例子中,我动态地添加了 javascript,并且在字符串模板中使用了两次双引号,所以我将第二次改为单引号,错误就消失了。 我希望它能帮助一些人来到这里的原因相同。

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

当你收到来自服务器或者其他什么的响应时,首先检查它是否是空的。例如:

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

然后你可以用:

fetch(url, options).then(parseJSON);

在我的情况下,我有低互联网速度,当我关闭其他用户的互联网连接,然后错误已经走了,奇怪

出现此错误的原因之一可能是网络基础设施。我在使用 Cloudflare 的网络代理服务时遇到了这个问题。只要我禁用代理和清除浏览器缓存,它就开始工作。因此,也要检查网络组件的状态。在我的案例中,它是在“ Cloudflarestatus.com/”rel = “ nofollow noReferrer”> Cloudflare 状态页面上传达的 enter image description here