未捕获的SyntaxError:意外的标记:

我在我的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(); }); }); 

只是为可能有同样的问题的人的FYI – 我只是让我的服务器发回JSON作为应用程序/ JSON和默认的jQuery处理程序工作正常。

看到红色的错误

未捕获的SyntaxError:意外的标记<

在Chrome开发者的控制台标签中通常会显示301redirect ,这可能是由.htaccess文件中的一条奇怪规则引起的。

你真正看到的是你的浏览器对来自服务器的意外的第一行<!DOCTYPE html>的反应。

这刚刚发生在我身上,原因并非上述原因。 我正在使用jQuery命令getJSON并添加callback=? 使用JSONP(因为我需要跨域),并返回JSON代码{"foo":"bar"}并得到错误。

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

下面是我用来实现这个的PHP代码,如果使用JSON(不带callback函数),则代码会降级:

 $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; } 

希望这将有助于未来的人。

我刚刚解决了这个问题。 有一些标准的请求调用导致问题,所以这是我使用的代码:

 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); }); }); 

如果有人知道为什么标准的请求对象给我的问题,我很想知道。

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

我得到: Uncaught SyntaxError: Unexpected token <和错误指向我的ajax成功语句中的这一行:

 var total = $.parseJSON(response); 

后来我发现,除了json结果之外,还有HTML被发送与响应,因为我的PHP中有一个错误。 当您在PHP中遇到错误时,您可以将它设置为用巨大的橙色表格提醒您,这些表格是JSON的抛出。

我发现,只是做一个console.log(response) ,以查看实际发送。 如果这是JSON数据的问题,试着看看是否可以做一个console.log或其他语句,让你看到什么发送和接收。

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

根据MooTools文档 :

javascript内容types的响应将被自动评估。

在结果MooTools试图评估你的JSON作为JavaScript,当你尝试评估这样的JSON:

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

作为JavaScript,parsing器将{}视为块范围而不是对象表示法。 这与评估下面的“代码”是一样的:

 "votes":47,"totalvotes":90 

正如你所看到的那样:在那里完全是意外的。

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

这听起来像你的反应正在进行评估。 这在Chrome中出现同样的错误:

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

这是由于大括号{…}被javascript解释为代码块,而不是人们可能期望的对象字面值。

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

类似的问题在这里: Eval()=意外的令牌:错误

我有同样的问题,事实certificate,从服务器返回的JSON是无效的JSON-P。 如果您不使用该调用作为跨域调用,请使用常规Json。

http://json-p.org/validator.html

Uncaught SyntaxError:Unexpected token ”错误的出现,当你的数据返回错误的json格式,在某些情况下,你不知道你得到了错误的json格式。
请用alert()检查一下。 function

 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); } 

出错“ 未捕获的SyntaxError:意外的标记
但如果你得到错误的JSON格式
例如:

… {“firstName”:“John”,“lastName”:“Doe”}

要么

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

所以你得到错误的JSON格式,请解决它之前你JSON.decode或JSON.parse

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

而不是使用ScriptIgnore属性,它可能会更好地返回一个DTO。

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

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

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

我改变了上面的映射

  @RequestMapping("/private/updatestatus") 

要么

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

对于我来说,当我在Chrome浏览器中查看源代码时,灯泡仍然亮着。 我在if语句中有一个额外的括号。 你会立即在失败的线上看到红色的圆圈。 这是一个相当无用的错误消息,因为未捕获的语法错误:意外令牌在第一次出现在Chrome控制台中时不会引用行号。

我做错了

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

我已经初始化了fsvariables。但是我又把var放在第二行。这个也给了那种错误…

未捕获的SyntaxError:意外的标记}

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'" ... 

但是这个错误与这个问题无关