在谷歌浏览器中加载页面时,我在控制台中得到一个模糊的错误:
未捕获的 SyntaxError: 输入的意外结束
我不知道是什么导致了这个错误,我该如何调试这个错误呢?
这个特殊的错误是关于 V8引擎的一个恼人的事实。在大多数情况下,您的 JavaScript 在某些方面出现了故障。例如缺少一个 }或类似的东西。
}
例如,这也会产生“意外的输入结束”:
eval('[{"test": 4}') // notice the missing ]
但是问题的根本原因似乎是被请求的 JSON URL 有一个 text/html的 内容类别,Chrome 显然试图将其解析为 HTML,然后由于所包含的图像标记正在被解析,导致意外的输入结束。
text/html
尝试设置 内容类别到 text/plain我认为它应该修复的问题。
text/plain
尽管如此,V8可以更好地告诉人们 在哪里的输入意外结束。
当我在 JavaScript 代码中省略了一个结束括号字符(})时,就会出现这个错误。 检查你的大括号是否平衡。
试试 Firebug for Mozilla-它会显示丢失的 }的位置。
Http://getfirebug.com/
对于记录,对于任何人试图找到这个错误的各种原因。一个空的 HTML5数据属性
data-mydata = ''
也导致了错误。您应该检查数据值是否为空字符串,并且根本不包括该属性。不用说,这在很大程度上与脚本生成的 HTML 相关。
对我来说,问题是我正在做 $。对于返回 HTTP201(已创建)且没有请求正文的 POST 请求,使用 ajax 和 dataType: "json"。修复方法是简单地删除键/值。
dataType: "json"
JSHint 擅长查找缺少括号或错误语法的位置。
参见另一个 类似的问题上的 我的案子:
在我的例子中,我试图解析一个空的 JSON: JSON.parse(stringifiedJSON); 换句话说,事情是这样的: JSON.parse("");
在我的例子中,我试图解析一个空的 JSON:
JSON.parse(stringifiedJSON);
换句话说,事情是这样的:
JSON.parse("");
肯定会有一个开放的括号导致错误。
我建议你在 Firefox 中打开这个页面,然后打开 Firebug 并检查控制台——它会显示缺少的符号。
示例截图:
这个错误的另一个原因是: 如果您的 API 故意没有响应主体进行响应,而是使用 200 OK状态代码而不是 204 No Content状态代码进行响应。当没有内容时,一些 JavaScript 库可能无法很好地响应意外的内容类型,因此使用正确的状态代码!
200 OK
204 No Content
当按 am/pm 切换时,我在 angularjs-uib-datepicker 中使用 ui bootstrap 指令遇到了类似的问题。
事件处理程序中的错误(未知) : SyntaxError: 意外结束 输入角度计时器
原来这是因为插件 跨越(单击时翻译一个单词)。也许我的答案能帮到别人,因为我在网上什么都没找到。
由于这是一个异步操作,因此 onreadystatechange可能会在该值加载到 responseText 之前发生,所以请尝试使用 window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); 查看错误是否仍然存在
onreadystatechange
window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
我的问题是谷歌浏览器缓存。我通过在 Firefox 上运行我的 web 应用程序来测试这个问题,并没有得到这个错误。所以我决定尝试清空谷歌浏览器的缓存,它起作用了。
我有这个错误,并通过在 readyState和 status上添加保护来修复它,如下所示:
readyState
status
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对我来说是有效的。
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 状态页面上传达的