我在我的MooTools脚本中运行一个AJAX调用,这在Firefox中工作得很好,但在Chrome中,我得到了一个未捕获的SyntaxError:意外令牌:错误,我不能确定为什么。注释掉代码来确定坏代码在哪里不会产生任何结果,我认为这可能是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();
  });
});

当前回答

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

其他回答

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

我想我应该把我的问题和决心加到清单上。

我得到:Uncaught SyntaxError:意外令牌<和错误是指向这一行在我的ajax成功声明:

var total = $.parseJSON(response);

我后来发现,除了json结果之外,还有HTML与响应一起发送,因为我的PHP中有一个错误。当PHP中出现错误时,你可以设置它用巨大的橙色表格来警告你这些表格会抛出JSON。

我发现,只是做一个console.log(响应),以查看实际发送了什么。如果这是JSON数据的问题,只需尝试查看是否可以执行console.log或其他一些语句,以便查看发送了什么和接收了什么。

之所以会发生这种情况,是因为我在快速服务器中设置了一个规则,将任何404路由回/#加上原始请求。允许angular router/js处理请求。如果没有js路由来处理这个路径,一个到/#/的请求就会发送到服务器,也就是一个到/的请求,整个网页。

例如,如果我想请求/correct/somejsfile.js,但我没有输入到/wrong/somejsfile.js,请求就会发送到服务器。该位置/文件不存在,因此服务器返回302位置:/#/wrong/somejsfile.js。浏览器愉快地跟随重定向,并返回整个网页。浏览器将页面解析为js,您将得到

未捕获SyntaxError:意外的令牌<

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

希望这能帮助到别人。

这种情况刚刚发生在我身上,而原因并不是上述原因中的任何一个。我使用jQuery命令getJSON和添加回调=?使用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; 
}

希望这能在将来帮助到别人。

当你请求JSON文件时,服务器返回JavaScript内容类型头(text/ JavaScript)而不是JSON (application/ JSON)。

根据MooTools文档:

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

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

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

作为JavaScript,解析器将{和}视为块作用域,而不是对象符号。它与求值以下“code”相同:

"votes":47,"totalvotes":90

如你所见,:在这里完全出乎意料。

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