我在我的 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();
});
});
看到红色错误
未捕获的 SyntaxError:意外的令牌 <
在您的 Chrome 开发人员的控制台选项卡中,响应正文中的 HTML 指示。
您实际看到的是您的浏览器对来自服务器的意外顶行 <!DOCTYPE html>
的反应。
对于可能有同样问题的人来说,仅供参考——我只需要让我的服务器将 JSON 作为 application/json 发回,默认的 jQuery 处理程序就可以正常工作。
application/json
解决了该错误。我没有使用 JSONP。
我也遇到过这种情况,原因都不是以上原因。我正在使用 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;
}
希望这对将来的人有所帮助。
我刚刚解决了这个问题。标准请求调用出现问题,所以这是我使用的代码:
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 对象给我带来了问题,我很想知道。
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
- 看图
$$
是什么?
我想我会将我的问题和解决方案添加到列表中。
我得到: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
)。
将自动评估带有 javascript 内容类型的响应。
结果 MooTools 尝试将您的 JSON 评估为 JavaScript,并且当您尝试评估此类 JSON 时:
{"votes":47,"totalvotes":90}
作为 JavaScript,解析器将 {
和 }
视为块范围而不是对象表示法。这与评估以下“代码”相同:
"votes":47,"totalvotes":90
如您所见,:
在那里完全出乎意料。
解决方案是为 JSON 文件设置正确的 Content-Type
标头。如果你用 .json
扩展保存它,你的服务器应该自己做。
听起来您的回答正在以某种方式进行评估。这在 Chrome 中给出了相同的错误:
var resp = '{"votes":47,"totalvotes":90}';
eval(resp);
这是因为大括号 '{...}' 被 javascript 解释为代码块,而不是人们可能期望的对象字面量。
我会查看 JSON.decode() 函数,看看那里是否有 eval。
类似问题:Eval() = Unexpected token : error
如果没有任何意义,则此错误也可能是由嵌入在 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 以发现此错误。
当您的数据返回错误的 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()
进行调试。
这也发生在我身上。我正在使用 EF 并返回一个实体以响应 AJAX 调用。我实体上的虚拟属性导致了服务器上未检测到的循环依赖错误。通过在虚拟属性上添加 [ScriptIgnore] 属性,问题得到解决。
与其使用 ScriptIgnore 属性,不如只返回一个 DTO。
发生这种情况是因为我的快速服务器中有一个规则设置,可以将任何 404 路由回 /#
以及原始请求。允许角度路由器/js 处理请求。如果没有 js 路由来处理该路径,则会向服务器发出对 /#/whatever
的请求,这只是对整个网页的 /
的请求。
因此,例如,如果我想向 /correct/somejsfile.js
发出请求,但我错过了将其键入到 /wrong/somejsfile.js
的请求,则会向服务器发出请求。该位置/文件不存在,因此服务器以 302 location: /#/wrong/somejsfile.js
响应。浏览器愉快地跟随重定向并返回整个网页。浏览器将页面解析为js,你得到
未捕获的 SyntaxError:意外的令牌 <
因此,为了帮助找到有问题的路径/请求,请查找 302 请求。
希望对某人有所帮助。
我遇到了同样的问题,结果发现从服务器返回的 Json 不是有效的 Json-P。如果您不将该调用用作跨域调用,请使用常规 Json。
我的错误是在 javascript 中忘记了 url 周围的单引号/双引号:
所以错误的代码是:
window.location = https://google.com;
和正确的代码:
window.location = "https://google.com";
在我的例子中,将 /
放在脚本 src
或样式表 href
的开头解决了这个问题。
当我使用 jQuery.getJSON()
尝试反序列化编码为 INF
的浮点值 Infinity
时,我得到了一个“SyntaxError: Unexpected token I
”,这在 JSON 中是非法的。
在我的情况下,由于我的 mvc 控制器中的错误映射,我在运行 spring mvc 应用程序时遇到了同样的错误
@RequestMapping(name="/private/updatestatus")
我将上面的映射更改为
@RequestMapping("/private/updatestatus")
或者
@RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
对我来说,当我在 Chrome 浏览器中查看页面的源代码时,灯泡会亮起。我在 if 语句中有一个额外的括号。您会立即在失败线上看到带有十字的红色圆圈。这是一条相当无用的错误消息,因为 Uncaught Syntax Error: Unexpected 令牌首次出现在 Chrome 的控制台中时没有引用行号。
我做错了
`var fs = require('fs');
var fs.writeFileSync(file, configJSON);`
我已经初始化了 fs
变量。但我再次将 var
放在第二行。这也给出了那种错误......
对于那些在 AngularJs 1.4.6 或类似版本中遇到这种情况的人,我的问题是 angular 找不到我的模板,因为找不到我提供的 templateUrl
(路径)处的文件。我只需要提供一条可达的路径,问题就消失了。
就我而言,这是一个错误的网址(不存在),所以也许你在第二行的“发送”应该是其他的......
此错误也可能意味着您的代码中缺少 colon
或 :
。
反复面对 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)"
派对迟到了,但我的解决方案是将 dataType 指定为 json。或者确保你没有设置 jsonp: true。
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'" ...
但是错误与问题无关..
Unexpected token :
时。您的回答与 OP 的问题完全无关。