tro*_*ock 178 javascript mootools google-chrome
我在我的MooTools脚本中运行一个AJAX调用,这在Firefox中工作正常但在Chrome中我收到Uncaught SyntaxError: Unexpected token :
错误,我无法确定原因.注释掉代码来确定坏代码的位置什么都没有产生,我想这可能是返回JSON的问题.检查控制台我看到返回的JSON是这样的:
{"votes":47,"totalvotes":90}
Run Code Online (Sandbox Code Playgroud)
我没有看到任何问题,为什么会出现这种错误?
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();
});
});
Run Code Online (Sandbox Code Playgroud)
and*_*oon 88
看到红色错误
未捕获的SyntaxError:意外的令牌<
在Chrome开发人员的控制台标签中,通常会显示301重定向,这可能是由.htaccess文件中有一条奇怪的规则引起的.
您实际看到的是您的浏览器<!DOCTYPE html>
对服务器意外顶线的反应.
小智 78
对于可能遇到同样问题的人来说只是一个FYI - 我只需要让我的服务器将JSON作为application/json发送回来,并且默认的jQuery处理程序工作正常.
Gri*_*... 41
这恰好发生在我身上,原因不在于上述原因.我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
希望这将有助于未来的人.
tro*_*ock 16
我刚刚解决了这个问题.标准的Request调用有问题,所以这是我使用的代码:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
如果有人知道为什么标准的Request对象给我带来了问题,我很想知道.
Kev*_*ven 10
我以为我会把我的问题和解决方案添加到列表中.
我得到了:Uncaught SyntaxError: Unexpected token <
错误指向我的ajax成功声明中的这一行:
var total = $.parseJSON(response);
Run Code Online (Sandbox Code Playgroud)
我后来发现,除了json结果之外,还有HTML与响应一起发送,因为我的PHP中有错误.当您在PHP中出现错误时,您可以将其设置为使用巨大的橙色表警告您,并且这些表是丢弃JSON的.
我发现只是console.log(response)
为了看看实际发送的是什么.如果这是JSON数据的问题,只需尝试查看是否可以执行console.log或其他一些语句,以便查看发送的内容和接收的内容.
当您请求JSON文件时,服务器返回JavaScript Content-Type
header(text/javascript
)而不是JSON(application/json
).
根据MooTools的文档:
将自动评估javascript内容类型的响应.
结果,MooTools尝试将您的JSON评估为JavaScript,并在您尝试评估此类JSON时:
{"votes":47,"totalvotes":90}
Run Code Online (Sandbox Code Playgroud)
作为JavaScript,解析器将对待{
并}
作为块作用域而不是对象表示法.它与评估以下"代码"相同:
"votes":47,"totalvotes":90
Run Code Online (Sandbox Code Playgroud)
如你所见,:
那里完全出乎意料.
解决方案是Content-Type
为JSON文件设置正确的标头.如果您使用.json
扩展名保存它,您的服务器应该自己执行.
听起来您的回答正在以某种方式进行评估。这在 Chrome 中给出了相同的错误:
var resp = '{"votes":47,"totalvotes":90}';
eval(resp);
Run Code Online (Sandbox Code Playgroud)
这是因为大括号 '{...}' 被 javascript 解释为代码块,而不是人们所期望的对象文字。
我会查看 JSON.decode() 函数,看看其中是否有 eval。
这里有类似的问题: Eval() = Unexpected token : error
归档时间: |
|
查看次数: |
922770 次 |
最近记录: |