【问题标题】:Chrome: Uncaught SyntaxError: Unexpected end of inputChrome:未捕获的 SyntaxError:输入意外结束
【发布时间】:2023-03-03 12:32:01
【问题描述】:

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

Uncaught SyntaxError: Unexpected end of input

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

【问题讨论】:

  • 检查网络嗅探器中的响应可能会给你一个线索。我的猜测是 Content-length 标头指定的字节数超过了响应包含的字节数,或者服务器可能以某种方式发送了无效的 HTML。
  • 大部分时间都缺少 } (javascript)。检查类和函数的结尾。尝试在脚本末尾添加另一个结束 } 并重新自动格式化代码。如果您的代码中有任何奇怪的缩进,那么在此之前的某个地方很可能是缺少 } 的地方。
  • 我在错误加载 JS 时遇到了这个问题。我把它加载为<script>https://example.com/a.js</script>,它应该是<script src="https://example.com/a.js"></script>
  • 我今天在 Google 表格上遇到了这个错误。我的猜测是他们的一个 JS 文件太大以至于它在没有完全加载的情况下被终止。或者他们的一个应用服务器有一个错误,在 JS 文件完全下载之前关闭了 http 连接。

标签: debugging google-chrome syntax-error


【解决方案1】:

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

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

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

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

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

尽管如此,V8 可以做得更好,可以准确地告诉用户在哪里输入意外结束。

【讨论】:

  • 好的,非常感谢,我一起删除了 json 请求,错误消失了,我还没有弄清楚我的 json 请求到底出了什么问题。我只是不知道从哪里开始调试。如果我可以问你是如何确定根本原因的
  • 这可能不是那么明显。我在缩小的 JS 上遇到了这个错误,因为它被最小化器破坏了,而未缩小的 JS 是完全合法和有效的。不幸的是,Chrome 只显示错误发生的那一行,对于最小化的 JS 通常是整个文件...
  • 输入结束的地方不多(因为那会在最后)。相反,知道 什么 会有所帮助。
  • 救了我的尾巴。我对这种模棱两可感到非常恼火。谢谢。
  • 我遇到了同样的错误,因为我使用的是 JSON.parse(text) 并且文本值为空字符串
【解决方案2】:

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

http://getfirebug.com/

【讨论】:

  • 不需要 Firebug。 Firefox 中的控制台准确地告诉我缺少哪一行和缺少什么字符
  • 也不需要萤火虫。火狐控制台ctrl+shift+i会告诉你。
  • 警告,如果脚本被最小化为一个巨大的行,预计 Firefox 会挂起几分钟/几小时/几年。
  • 这是迄今为止追踪这些语法错误的最简单方法
  • 天哪,谢谢。我觉得 chrome 在开发人员工具方面与 Firefox 相比遥遥领先。令人惊讶的是,它如何未能正确处理这件小事。让我免于头疼!
【解决方案3】:

在另一个similar question 上查看my case

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

JSON.parse(stringifiedJSON);

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

JSON.parse("");

【讨论】:

  • 是的,我也有这个!您可以通过提供“{}”而不是空字符串来轻松解决
  • 由于 URL 中的双斜杠(例如 localhost:8080//mypath/blagh),我收到了空的 json,并且服务器为此返回了一个空响应。
  • 我来这里只是为了确认这个解决方案。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    记录在案,对于任何试图找出导致此错误的各种原因的人。一个空的 HTML5 数据属性

    data-mydata = ''
    

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

    【讨论】:

    • 如果没有你,永远不会想到这一点。我正在使用 VideoJS,我从他们的页面复制了他们的视频播放器的 html。它有一个你可以使用的数据属性占位符,但我没有。视频没有加载,我收到了每个人都在谈论的错误。删除 data-setup='{"example_option":true}' 后一切正常。
    • @user1002379,很高兴我能帮上忙。
    【解决方案6】:

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

    【讨论】:

    • 我启动了一个 ajax 请求(上传)并在它完成之前中止了它,我得到了这个错误。
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

        肯定会有一个左括号导致错误。

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

        示例截图:

        【讨论】:

          【解决方案10】:

          我的问题在于 Google Chrome 缓存。我通过在 Firefox 上运行我的 Web 应用程序对此进行了测试,但没有出现该错误。所以我决定尝试清空谷歌浏览器的缓存,它成功了。

          【讨论】:

            【解决方案11】:

            如果您的 JavaScript 代码被压缩为一行,另一个导致此错误的原因是您的 cmets 使用 // 而不是 /**/

            糟糕(在 // 之后删除所有内容,包括您的函数的结束 }

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

            好(限制你的评论)

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

            【讨论】:

            • 工作,另外,你应该使用 \" the-text \" 作为指“the-text”也用于铸造。
            【解决方案12】:

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

            【讨论】:

            • 使用addthis我用双字符串附加到url,然后改为单引号,控制台错误消失了
            【解决方案13】:

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

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

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

            然后你可以使用:

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

            【讨论】:

              【解决方案14】:

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

              (未知)的事件处理程序错误:SyntaxError: Unexpected end of JSON 输入角度时间选择器

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

              【讨论】:

                【解决方案15】:

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

                【讨论】:

                  【解决方案16】:

                  我遇到了这个错误,并通过在readyStatestatus 上添加防护来修复它:

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

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                      【解决方案18】:

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

                      【讨论】:

                        【解决方案19】:

                        在我的情况下,我的网速很低,当我关闭其他用户的互联网连接时,错误消失了,奇怪

                        【讨论】:

                          【解决方案20】:

                          导致此错误的原因之一可能是网络基础设施。通过使用 Cloudflare 的 Web 代理服务,我遇到了这个问题。一旦我禁用代理并清除浏览器缓存,它就开始工作。因此,请检查您的网络组件的状态。就我而言,它是通过Cloudflare status page 传达的

                          【讨论】:

                            猜你喜欢
                            • 2017-01-05
                            • 2021-01-09
                            • 1970-01-01
                            • 1970-01-01
                            • 2016-08-05
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-06-26
                            • 1970-01-01
                            相关资源
                            最近更新 更多