未捕获的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。
“ 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);`
我已经初始化了fs
variables。但是我又把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'" ...
但是这个错误与这个问题无关