ChatGPT解决这个技术问题 Extra ChatGPT

Uncaught SyntaxError: Unexpected token :

我在我的 MooTools 脚本中运行 AJAX 调用,这在 Firefox 中运行良好,但在 Chrome 中我收到 Uncaught SyntaxError: Unexpected token : 错误,我无法确定原因。注释掉代码以确定错误代码的位置不会产生任何结果,我认为这可能是返回 JSON 的问题。检查控制台我看到返回的 JSON 是这样的:

{"votes":47,"totalvotes":90}

我没有看到任何问题,为什么会出现这个错误?

vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });

  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});
JSON很好。问题可能是你如何处理它。显示代码会有所帮助。
将代码部分添加到问题中。
语法,JS或JSON似乎没有任何问题。在 jsfiddle.net 上发布一个(不)工作的测试用例会有所帮助——包括 HTML。
我目前正在连接互联网,所以我的调制解调器压缩了我浏览的网站的 HTML 源代码,所以我无法真正从代码中找出正面或反面。但是,对于初学者来说,将每个 JS 代码放在外部文件中——这总是使调试更容易——你会知道错误是由 JS 或其他原因引起的。
“意外令牌”可能是一些非法字符代码。当您打印到控制台时,这样的代码可能不会出现。因此,一次打印出字符串一个字符或使用协议分析器或调试器等来查看字符串的实际字节。

m
miken32

看到红色错误

未捕获的 SyntaxError:意外的令牌 <

在您的 Chrome 开发人员的控制台选项卡中,响应正文中的 HTML 指示。

您实际看到的是您的浏览器对来自服务器的意外顶行 <!DOCTYPE html> 的反应。


我不知道你为什么在谈论“意外令牌<”当问题是关于 Unexpected token : 时。您的回答与 OP 的问题完全无关。
我该如何解决这个问题?我有一个在 Chrome 中导致此问题的 php 重定向。
要添加到@andy_magoon,在我的例子中,我有一个脚本标签应该提供 javascript,但是因为请求被重定向到一个 HTML 页面(它被重定向的原因并不重要),它以 ,这不是有效的 javascript,浏览器在尝试将 HTML 解析为 JS 时返回 SyntaxError。
@Thom 修复它的方法是确保 HTTP get 返回您正在寻找的 javascript 文件,而不是意外的 HTML。
我得到了这个错误,因为事实证明文件路径不正确,它找不到脚本标记中指定的文件。
E
Edward Abrams

对于可能有同样问题的人来说,仅供参考——我只需要让我的服务器将 JSON 作为 application/json 发回,默认的 jQuery 处理程序就可以正常工作。


我想我遇到了这个问题的反面。我从第三方 API 请求 JSON,他们返回 application/javascript 作为响应,我收到了与您在这个问题中报告的相同的错误。不知道如何处理它。
一个奇怪的问题是 - 它在本地主机上运行良好,但在服务器上却不行。知道为什么吗?
你好。我有确切的问题,我无法解决,有人可以告诉我你如何将 JSON 发送回服务器
谢谢我正在发送应用程序/javascript(因为我误读了 this SO )并且在简单的有效 JSON 上收到此错误。将其更改为 application/json 解决了该错误。我没有使用 JSONP。
即使我收到相同的错误 "Uncaught SyntaxError: Unexpected token :" ,即使在收到 json 格式的响应 {"success":true,"data":2593}
G
Grim...

我也遇到过这种情况,原因都不是以上原因。我正在使用 jQuery 命令 getJSON 并添加 callback=? 以使用 JSONP(因为我需要跨域),并返回 JSON 代码 {"foo":"bar"} 并收到错误。

这是因为我应该包含回调数据,例如 jQuery17209314005577471107_1335958194322({"foo":"bar"})

这是我用来实现这一点的 PHP 代码,如果使用 JSON(没有回调),它会降级:

$ret['foo'] = "bar";
finish();

function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

希望这对将来的人有所帮助。


这对我帮助很大。每当我们使用 jsonp 方法时,我们都应该用 jsoncallback 数据包装 json 数据。 jsonpcallback 数据也不应该以数字开头。当我尝试使用数字时,它没有成功。当我使用此答案中显示的相同格式尝试它时,它起作用了......
确实如此,但是错误是相同的,并且如果使用 JSON,代码将优雅地降级并且仍然可以工作。
这对我来说适用于 AJAX、jQuery 和 JSONP。非常感谢!
t
trobrock

我刚刚解决了这个问题。标准请求调用出现问题,所以这是我使用的代码:

vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});

如果有人知道为什么标准的 Request 对象给我带来了问题,我很想知道。


标准请求和 request.json 之间的区别主要在标头中,它添加了 this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'}); - 看图
奇怪的是,这就是导致此问题的原因。
那里的双 $$ 是什么?
@DimitarChristoff - falsarella 关于 $$ 的任何答案?
@bear 双美元选择器在 MooTools 中定义。
K
Keven

我想我会将我的问题和解决方案添加到列表中。

我得到:Uncaught SyntaxError: Unexpected token < 并且错误指向我的 ajax 成功声明中的这一行:

var total = $.parseJSON(response);

后来我发现除了 json 结果之外,还有 HTML 与响应一起发送,因为我的 PHP 中有错误。当您在 PHP 中遇到错误时,您可以将其设置为用巨大的橙色表格警告您,而这些表格正是导致 JSON 异常的原因。

我通过执行 console.log(response) 来查看实际发送的内容就发现了这一点。如果这是 JSON 数据的问题,请尝试查看是否可以执行 console.log 或其他一些语句,以便您查看发送的内容和接收的内容。


我这样做了。我在我的 php 文件中某处回显 json 并在我的响应中获取 php[//json 数据] 但我无法解析它。感谢您发布此内容,以便我找出自己的错误。
OP问题完全不同。在您的情况下,您正在尝试将 HTML 解析为 JSON,而在 OP 的情况下,他正在尝试将 JSON 解析为 JavaScript。
M
Michał Perłakowski

当您请求 JSON 文件时,服务器返回 JavaScript Content-Type 标头 (text/javascript) 而不是 JSON (application/json)。

根据MooTools docs

将自动评估带有 javascript 内容类型的响应。

结果 MooTools 尝试将您的 JSON 评估为 JavaScript,并且当您尝试评估此类 JSON 时:

{"votes":47,"totalvotes":90}

作为 JavaScript,解析器将 {} 视为块范围而不是对象表示法。这与评估以下“代码”相同:

"votes":47,"totalvotes":90

如您所见,: 在那里完全出乎意料。

解决方案是为 JSON 文件设置正确的 Content-Type 标头。如果你用 .json 扩展保存它,你的服务器应该自己做。


C
Community

听起来您的回答正在以某种方式进行评估。这在 Chrome 中给出了相同的错误:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

这是因为大括号 '{...}' 被 javascript 解释为代码块,而不是人们可能期望的对象字面量。

我会查看 JSON.decode() 函数,看看那里是否有 eval。

类似问题:Eval() = Unexpected token : error


H
Hammad Khan

如果没有任何意义,则此错误也可能是由嵌入在 html/javascript 中的 PHP 错误引起的,如下所示

<br />
<b>Deprecated</b>:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

不是由 PHP 插入 html 的代码中的 <br /> 等导致错误。要修复这种错误(抑制警告),请在开始时使用此代码

error_reporting(E_ERROR | E_PARSE);

要查看,请右键单击页面,“查看源代码”,然后检查完整的 html 以发现此错误。


R
Rain

当您的数据返回错误的 json 格式时,会出现“Uncaught SyntaxError: Unexpected token”错误,在某些情况下,您不知道您得到了错误的 json 格式。请使用 alert() 进行检查;功能

onSuccess : function(resp){  
   alert(resp);  
}

您收到的消息应该是: {"firstName":"John", "lastName":"Doe"} 然后您可以使用下面的代码

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

没有错误“Uncaught SyntaxError: Unexpected token”但是如果你得到错误的 json 格式例如:

...{"firstName":"John", "lastName":"Doe"}

或者

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

所以你得到了错误的 json 格式,请在 JSON.decode 或 JSON.parse 之前修复它


我建议使用 console.log() 而不是 alert() 进行调试。
D
Daryl

这也发生在我身上。我正在使用 EF 并返回一个实体以响应 AJAX 调用。我实体上的虚拟属性导致了服务器上未检测到的循环依赖错误。通过在虚拟属性上添加 [ScriptIgnore] 属性,问题得到解决。

与其使用 ScriptIgnore 属性,不如只返回一个 DTO。


J
Jerinaw

发生这种情况是因为我的快速服务器中有一个规则设置,可以将任何 404 路由回 /# 以及原始请求。允许角度路由器/js 处理请求。如果没有 js 路由来处理该路径,则会向服务器发出对 /#/whatever 的请求,这只是对整个网页的 / 的请求。

因此,例如,如果我想向 /correct/somejsfile.js 发出请求,但我错过了将其键入到 /wrong/somejsfile.js 的请求,则会向服务器发出请求。该位置/文件不存在,因此服务器以 302 location: /#/wrong/somejsfile.js 响应。浏览器愉快地跟随重定向并返回整个网页。浏览器将页面解析为js,你得到

未捕获的 SyntaxError:意外的令牌 <

因此,为了帮助找到有问题的路径/请求,请查找 302 请求。

希望对某人有所帮助。


C
Community

我遇到了同样的问题,结果发现从服务器返回的 Json 不是有效的 Json-P。如果您不将该调用用作跨域调用,请使用常规 Json。


OP 使用 JSON,而不是 JSONP。
S
Saeed Arianmanesh

我的错误是在 javascript 中忘记了 url 周围的单引号/双引号:

所以错误的代码是:

window.location = https://google.com;

和正确的代码:

window.location = "https://google.com";

V
Vahid Kiani

在我的例子中,将 / 放在脚本 src 或样式表 href 的开头解决了这个问题。


这也解决了我的情况。
M
Mark Cidade

当我使用 jQuery.getJSON() 尝试反序列化编码为 INF 的浮点值 Infinity 时,我得到了一个“SyntaxError: Unexpected token I”,这在 JSON 中是非法的。


这个问题是关于“意外的令牌:”。
S
Shravan Ramamurthy

在我的情况下,由于我的 mvc 控制器中的错误映射,我在运行 spring mvc 应用程序时遇到了同样的错误

@RequestMapping(name="/private/updatestatus")

我将上面的映射更改为

 @RequestMapping("/private/updatestatus")

或者

 @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)

J
JGFMK

对我来说,当我在 Chrome 浏览器中查看页面的源代码时,灯泡会亮起。我在 if 语句中有一个额外的括号。您会立即在失败线上看到带有十字的红色圆圈。这是一条相当无用的错误消息,因为 Uncaught Syntax Error: Unexpected 令牌首次出现在 Chrome 的控制台中时没有引用行号。


J
Janen R

我做错了

   `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

我已经初始化了 fs 变量。但我再次将 var 放在第二行。这也给出了那种错误......


l
lwdthe1

对于那些在 AngularJs 1.4.6 或类似版本中遇到这种情况的人,我的问题是 angular 找不到我的模板,因为找不到我提供的 templateUrl(路径)处的文件。我只需要提供一条可达的路径,问题就消失了。


我通过更正 baseref url 解决了同样的问题 - 指向根文件夹 =>
M
Michal - wereda-net

就我而言,这是一个错误的网址(不存在),所以也许你在第二行的“发送”应该是其他的......


C
Cons Bulaquena

此错误也可能意味着您的代码中缺少 colon:


N
Neeraj Kumar

反复面对 JS 问题我正在为我的 xblock 包应用 Ckeditor。如果有人帮助我,请向我建议。使用 OpenEdx、Javascript、xblock

xblock.js:158 SyntaxError: Unexpected token '=>'
at eval (<anonymous>)
at Function.globalEval (jquery.js:343)
at domManip (jquery.js:5291)
at jQuery.fn.init.append (jquery.js:5431)
at child.loadResource (xblock.js:236)
at applyResource (xblock.js:199)
at Object.<anonymous> (xblock.js:202)
at fire (jquery.js:3187)
at Object.add [as done] (jquery.js:3246)
at applyResource (xblock.js:201) "SyntaxError: Unexpected token '=>'\n    at eval (<anonymous>)\n    at Function.globalEval (http://localhost:18010/static/studio/common/js/vendor/jquery.js:343:5)\n    at domManip (http://localhost:18010/static/studio/common/js/vendor/jquery.js:5291:15)\n    at jQuery.fn.init.append (http://localhost:18010/static/studio/common/js/vendor/jquery.js:5431:10)\n    at child.loadResource (http://localhost:18010/static/studio/bundles/commons.js:5091:27)\n    at applyResource (http://localhost:18010/static/studio/bundles/commons.js:5054:36)\n    at Object.<anonymous> (http://localhost:18010/static/studio/bundles/commons.js:5057:25)\n    at fire (http://localhost:18010/static/studio/common/js/vendor/jquery.js:3187:31)\n    at Object.add [as done] (http://localhost:18010/static/studio/common/js/vendor/jquery.js:3246:7)\n    at applyResource (http://localhost:18010/static/studio/bundles/commons.js:5056:29)"

K
Karim Tingdis

派对迟到了,但我的解决方案是将 dataType 指定为 json。或者确保你没有设置 jsonp: true。


u
ungalcrys

Uncaught SyntaxError: Unexpected token }

Chrome 给了我这个示例代码的错误:

<div class="file-square" onclick="window.location = " ?dir=zzz">
    <div class="square-icon"></div>
    <div class="square-text">zzz</div>
</div>

并解决了它修复onclick就像

... onclick="window.location = '?dir=zzz'" ...

但是错误与问题无关..


OP询问“意外的令牌:”。