首页 文章

未捕获的SyntaxError:意外的令牌:

提问于
浏览
158

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

18 回答

  • 1

    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'" ...
    

    但错误与问题无关..

  • 1

    我以为我会将我的问题和解决方案添加到列表中 .

    我得到了: Uncaught SyntaxError: Unexpected token < ,错误指向我的ajax成功声明中的这一行:

    var total = $.parseJSON(response);
    

    我后来发现,除了json结果之外,还有HTML与响应一起发送,因为我的PHP中有错误 . 当您在PHP中出现错误时,您可以将其设置为使用巨大的橙色表警告您,并且这些表是丢弃JSON的 .

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

  • 3

    对于可能遇到同样问题的人来说只是一个FYI - 我只需要让我的服务器将JSON作为application / json发送回来,并且默认的jQuery处理程序工作正常 .

  • 1

    看到红色错误

    Uncaught SyntaxError:意外的令牌<

    在Chrome开发人员的控制台标签中,通常会显示_t2ac9文件中有一条奇怪的规则可能导致 301 Redirects .

    你对服务器意外的顶线_792131的反应是什么?

  • 16

    这恰好发生在我身上,原因不在于上述原因 . 我使用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; 
    }
    

    希望这将有助于未来的人 .

  • 0

    我刚刚解决了这个问题 . 标准的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);
      });
    });
    

    如果有人知道为什么标准的Request对象给我带来了问题,我很想知道 .

  • 10

    当您请求JSON文件时,服务器返回JavaScript Content-Type 标头( text/javascript )而不是JSON( application/json ) .

    根据MooTools docs

    将自动评估javascript内容类型的响应 .

    结果,MooTools尝试将您的JSON评估为JavaScript,并在您尝试评估此类JSON时:

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

    作为JavaScript,解析器将 {} 视为块作用域而不是对象表示法 . 它与评估以下"code"相同:

    "votes":47,"totalvotes":90
    

    如你所见, : 在那里完全出人意料 .

    解决方案是为JSON文件设置正确的 Content-Type 标头 . 如果使用 .json 扩展名保存它,您的服务器应该自行完成 .

  • 1

    听起来你的回答正在以某种方式进行评估 . 这会在Chrome中出现相同的错误:

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

    这是因为大括号“”被javascript解释为代码块而不是人们所期望的对象文字 .

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

    类似的问题在这里:Eval() = Unexpected token : error

  • 7

    Uncaught SyntaxError: Unexpected token ”错误外观当你的数据返回错误的json格式时,在某些情况下,你不知道你的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>
    {"firstName":"John", "lastName":"Doe"}

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

  • 0

    今天也发生在我身上 . 我正在使用EF并返回一个实体来响应AJAX调用 . 我的实体上的虚拟属性导致了在服务器上未检测到的循环依赖性错误 . 通过在虚拟属性上添加[ScriptIgnore]属性,问题得以解决 .

    而不是使用ScriptIgnore属性,最好只返回DTO .

  • 0

    之所以发生这种情况,是因为我在快递服务器中设置了规则,将任何404路由回到 /# 加上原始请求 . 允许角度路由器/ js处理请求 . 如果没有js路由来处理该路径,则向服务器发出一个请求 /#/whatever ,这只是对整个网页的 / 的请求 .

    因此,例如,如果我想要 /correct/somejsfile.js 的请求,但我错过键入它 /wrong/somejsfile.js ,请求发送到服务器 . 该位置/文件不存在,因此服务器以 302 location: /#/wrong/somejsfile.js 响应 . 该浏览器愉快地遵循重定向并返回整个网页 . 浏览器将页面解析为js然后就可以了

    Uncaught SyntaxError:意外的令牌<

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

    希望能帮助别人 .

  • 76

    我有同样的问题,事实证明从服务器返回的Json无效Json-P . 如果您不将该调用用作跨域调用,请使用常规Json .

  • -3

    当我使用 jQuery.getJSON() 尝试反序列化 Infinity 的浮点值时,我得到了一个“ SyntaxError: Unexpected token I ”,编码为 INF ,这在JSON中是非法的 .

  • 0

    在我的情况下,我遇到了同样的错误,因为我的mvc控制器中的错误映射运行spring mvc应用程序

    @RequestMapping(name="/private/updatestatus")
    

    我将上面的映射更改为

    @RequestMapping("/private/updatestatus")
    

    要么

    @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
    
  • 75

    对我来说,当我在Chrome浏览器中查看源页面时,灯泡仍然亮着 . 我在if语句中有一个额外的括号 . 您将立即在失败的线路上看到带有十字的红色圆圈 . 这是一个相当无用的错误消息,因为未捕获的语法错误:意外的令牌在首次出现在Chrome控制台中时不会引用行号 .

  • 39

    我做错了

    `var  fs = require('fs');
        var fs.writeFileSync(file, configJSON);`
    

    我已经初始化了 fs 变量 . 但是我再次把 var 放在第二行 . 这个也给出了那种错误......

  • 0

    对于那些在AngularJs 1.4.6或类似版本中遇到这种情况的人,我的问题是角度找不到我的模板,因为找不到我提供的 templateUrl (路径)的文件 . 我只需提供可到达的路径,问题就消失了 .

  • 0

    如果没有任何意义,这个错误也可能是由嵌入在html / javascript中的PHP Error引起的,例如下面的那个


    <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>
    var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

    Not the
    etc in the code that are inserted into html by PHP is causing the error
    . 要修复此类错误(禁止警告),请在开始时使用此代码

    error_reporting(E_ERROR | E_PARSE);
    

    要查看,请右键单击页面,“查看源代码”,然后检查完整的html以发现此错误 .

相关问题