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

时间:2010-08-29 13:26:45

标签: debugging google-chrome syntax-error

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

  

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

我不知道是什么导致了它。我该如何调试此错误?

19 个答案:

答案 0 :(得分:215)

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

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

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

但问题的根本原因似乎是请求的JSON网址有{strong>内容类型 text/html,Chrome显然会尝试将其解析为HTML,然后导致由于正在解析包含的图像标记这一事实导致意外的输入结束。

尝试将内容类型设置为text/plain我认为应该解决问题。

尽管如此,V8可以做一个更好的工作,告诉一个完全 输入意外结束。

答案 1 :(得分:70)

尝试使用Firebug for Mozilla - 它将显示缺少}的位置。

http://getfirebug.com/

答案 2 :(得分:32)

在另一个my case上查看similar question

  

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

JSON.parse(stringifiedJSON);
     

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

JSON.parse("");

答案 3 :(得分:10)

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

答案 4 :(得分:9)

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

data-mydata = ''

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

答案 5 :(得分:8)

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

答案 6 :(得分:6)

JSHint擅长找到丢失括号或语法错误的位置。

答案 7 :(得分:5)

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

答案 8 :(得分:3)

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

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

屏幕截图示例:

Firebug highlighting the error

答案 9 :(得分:2)

我的问题出在谷歌Chrome缓存上。我通过在Firefox上运行我的Web应用程序测试了这一点,我没有在那里得到那个错误。所以我决定尝试清空谷歌浏览器的缓存,但它确实有效。

答案 10 :(得分:1)

由于它是异步操作,onreadystatechange可能会在responseText中加载值之前发生,请尝试使用window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); 看错误是否仍然存在? BOL

答案 11 :(得分:0)

对于我来说,我的互联网速度很慢,当我关闭其他用户的互联网连接时,错误就消失了,很奇怪

答案 12 :(得分:0)

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

当您收到服务器或其他任何响应时,请首先检查响应是否为空。例如:

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

然后您可以通过以下方式获取:

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

答案 13 :(得分:0)

就我而言,我是动态添加JavaScript并在字符串模板中使用了两次双引号,因此我将第二个改为单引号,并且错误消失了。 我希望它能以同样的理由帮助一些来这里的人。

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

错误(注释//之后的所有内容,包括函数的结尾}

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

很好(可以发表您的评论)

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

答案 17 :(得分:0)

我遇到了此错误,并通过在此处显示的readyStatestatus上添加了防护措施来解决此错误:

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

答案 18 :(得分:0)

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

  

(未知)事件处理程序出错:SyntaxError:意外结束   JSON输入角度时间戳

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