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

当前回答

今天我也遇到了这种情况。我使用EF和返回一个实体响应AJAX调用。实体上的虚拟属性导致服务器上未检测到的周期性依赖项错误。通过在虚拟属性上添加[ScriptIgnore]属性,这个问题得到了解决。

与其使用ScriptIgnore属性,不如直接返回DTO。

其他回答

对我来说,当我在Chrome浏览器中查看页面的源代码时,灯泡就亮了。我在if语句中多了一个括号。您将立即在失败的行上看到一个带叉的红圈。这是一个相当没有帮助的错误消息,因为“未捕获语法错误:意外令牌”第一次出现在Chrome控制台时没有引用行号。

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

听起来好像你的回答被评估了。这将在Chrome中给出相同的错误:

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

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

我会查看JSON.decode()函数,看看是否有一个eval在那里。

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

我也遇到了同样的问题,结果是Json从服务器返回 不是有效的Json-P。如果不使用跨域调用,请使用常规Json。

当你的数据返回错误的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); 
}

“未捕获SyntaxError:意外令牌” 但如果json格式有误 例:

...{“firstName”:“约翰”,“姓”:“母鹿”}

or

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

所以你得到了错误的json格式,请在json .decode或json .parse之前修复它