提问人:dlaurent86 提问时间:8/29/2010 最后编辑:Qix - MONICA WAS MISTREATEDdlaurent86 更新时间:9/15/2021 访问量:538733
Chrome:未捕获的语法错误:输入意外结束
Chrome: Uncaught SyntaxError: Unexpected end of input
问:
在 Google Chrome 中加载我的页面时,我在控制台中收到一个模糊的错误:
未捕获的语法错误:输入意外结束
我不知道是什么原因造成的。我将如何调试此错误?
答:
这个特殊的错误是关于 v8 的一个令人讨厌的事实。在大多数情况下,你的 JavaScript 在某种程度上被破坏了。例如,缺少一个或类似的东西。}
给出示例,这也将产生“意外的输入结束”:
eval('[{"test": 4}') // notice the missing ]
但问题的根本原因似乎是请求的 JSON url 有一个 Content-Type,Chrome 显然试图将其解析为 HTML,然后由于包含的图像标签正在被解析,这会导致输入意外结束。text/html
尝试将 Content-Type 设置为我认为它应该解决问题。text/plain
尽管如此,V8 可以做得更好,准确地告诉人们输入意外结束的位置。
评论
当我在 JavaScript 代码中省略右大括号字符 () 时,我收到此错误。
检查您的牙套是否正确平衡。}
尝试 Firebug for Mozilla - 它将显示丢失的位置。}
评论
ctrl+shift+i
作为记录,对于任何试图找到此错误的各种原因的人。空的 HTML5 数据属性
data-mydata = ''
也会导致错误。当数据值为 null 字符串时,应检查该值,并且根本不包含该属性。不言而喻,这在很大程度上与脚本生成的 HTML 有关。
评论
data-setup='{"example_option":true}'
对我来说,问题是我正在对返回HTTP 201(已创建)且没有请求正文的POST请求执行$.ajax。解决方法是简单地删除该键/值。dataType: "json"
评论
JSHint 擅长查找缺少括号或语法错误的位置。
就我而言,我试图解析一个空的 JSON:
JSON.parse(stringifiedJSON);
换句话说,发生的事情如下:
JSON.parse("");
评论
肯定会有一个打开的括号导致错误。
我建议您在Firefox中打开该页面,然后打开Firebug并检查控制台 - 它将显示缺少的符号。
屏幕截图示例:
此错误的另一个原因:如果您的 API 故意不使用响应正文进行响应,而是使用状态代码而不是状态代码进行响应。当没有内容时,某些 JavaScript 库可能无法很好地响应意外的内容类型,因此请使用正确的状态代码!200 OK
204 No Content
当按 am/pm 切换时,我使用 angularjs 的 ui bootstrap 指令 - uib-datepicker 遇到了类似的问题。
事件处理程序中的错误(未知):SyntaxError:意外结束 JSON input angular timepicker
原来这是因为插件“Trans-over”(点击时会翻译一个单词)。也许我的回答会对某人有所帮助,因为我在互联网上没有找到任何东西。
由于这是一个异步操作,因此可能会在值加载到 responseText 中之前发生,请尝试使用 a 查看错误是否仍然存在?提货单onreadystatechange
window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
我的问题是谷歌浏览器缓存。我通过在Firefox上运行我的Web应用程序来测试这一点,并且没有出现该错误。因此,我决定尝试清空Google Chrome浏览器的缓存,并且它起作用了。
我遇到了这个错误,并通过添加防护装置来修复它,如下所示:readyState
status
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Your code here
}
};
如果您的 JavaScript 代码被缩小到一行,则导致此错误的另一个原因是使用而不是您的注释。//
/**/
不好(在包含函数的关闭后注释掉所有内容)//
}
function example() { //comment console.log('TEST'); }
好(限制您的评论)
function example() { /* comment */ console.log('TEST'); }
评论
如果您在锚标记上遇到错误,只需将“Onclick”替换为“href”或将“href”替换为“Onclick”
当我遇到同样的问题时,在请求中设置标头对我有用。Accept
application/json
就我而言,我动态添加 javascript 并在字符串模板中使用双引号 2 次,所以我将第二个引号更改为单引号,错误就消失了。 我希望它能帮助一些出于同样原因来到这里的人。
评论
尝试解析空 JSON 可能是导致此错误的原因。
当您收到来自服务器或其他设备的响应时,请先检查它是否不为空。例如:
function parseJSON(response) {
if (response.status === 204 || response.status === 205) {
return null;
}
return response.json();
}
然后你可以用以下命令获取:
fetch(url, options).then(parseJSON);
就我而言,我的互联网速度很低,当我关闭其他用户的互联网连接时,错误就消失了,很奇怪
此错误的原因之一可能是网络基础结构。我使用 Cloudflare 的 Web 代理服务遇到了这个问题。一旦我禁用代理并清除浏览器缓存,它就开始工作。因此,也要检查网络组件的状态。就我而言,它是在 Cloudflare 状态页面上传达的
评论
Content-length
<script>https://example.com/a.js</script>
<script src="https://example.com/a.js"></script>