未捕获的语法错误:意外标记:

IT技术 javascript mootools google-chrome
2021-01-13 01:39:00

我在我的 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();
  });
});
6个回答

看到红色错误

未捕获的语法错误:意外的标记 <

在 Chrome 开发人员的控制台选项卡中,响应正文中的 HTML 指示。

您实际看到的是浏览器对<!DOCTYPE html>来自服务器的意外顶线的react

@Thom 修复它的方法是确保 HTTP get 返回您正在寻找的 javascript 文件,而不是意外的 HTML。
2021-03-15 01:39:00
我该如何解决这个问题?我有一个 php 重定向,它在 Chrome 中导致了这个问题。
2021-03-16 01:39:00
我得到了这个错误,因为事实证明,文件路径不正确,它找不到脚本标记中指定的文件。
2021-03-21 01:39:00
当问题是关于Unexpected token :. 您的回答与 OP 的问题完全无关。
2021-03-28 01:39:00
要添加到@andy_magoon,在我的例子中,我有一个脚本标签,它应该提供 javascript,但是因为请求被重定向到一个 HTML 页面(它为什么被重定向并不重要),它以 <!DOCTYPE html 开头>,这是无效的 javascript,浏览器在尝试将 HTML 解析为 JS 时返回 SyntaxError。
2021-03-28 01:39:00

对于可能有同样问题的人,仅供参考——我只需要让我的服务器将 JSON 作为 application/json 发回,并且默认的 jQuery 处理程序工作正常。

即使我收到同样的错误 "Uncaught SyntaxError: Unexpected token :" ,即使在收到 json 格式的响应 {"success":true,"data":2593}
2021-03-20 01:39:00
谢谢我正在发送应用程序/javascript(因为我误读了这个 SO)并且在简单的有效 JSON 上收到了这个错误。更改它以application/json解决错误。我没有使用 JSONP。
2021-03-24 01:39:00
我想我遇到了这个问题的反面。我正在从第三方 API 请求 JSON,他们正在返回 application/javascript 作为响应,并且我收到了您在此问题中报告的相同错误。不知道如何处理。
2021-03-27 01:39:00
一个奇怪的问题是 - 它在本地主机上运行良好,但在服务器上运行不正常。知道为什么吗?
2021-04-03 01:39:00
你好。我有确切的问题,我无法解决,谁能告诉我你如何将 JSON 发送回服务器
2021-04-10 01:39:00

这是我刚刚发生的,原因不是上述任何一个原因。我正在使用 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; 
}

希望这会对将来的某人有所帮助。

确实如此,但错误是相同的,如果使用 JSON,代码会优雅地降级并且仍然可以工作。
2021-03-22 01:39:00
这对我帮助很大。每当我们使用 jsonp 方法时,我们应该用 jsoncallback 数据包装 json 数据。此外,jsonpcallback 数据不应以数字开头。当我尝试使用数字时,它没有成功。当我使用此答案中显示的相同格式尝试它时,它起作用了......
2021-03-26 01:39:00
这对我使用 AJAX、jQuery 和 JSONP 很有效。非常感谢!
2021-03-29 01:39:00

我刚刚解决了这个问题。标准请求调用出现问题,所以这是我使用的代码:

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 对象会给我带来问题,我很想知道。

@bear 双美元选择器在 MooTools 中定义。
2021-03-29 01:39:00
@DimitarChristoff——任何关于 $$ 的 falsarella 的答案?
2021-03-30 01:39:00
$$那里有什么
2021-04-06 01:39:00
标准请求和 request.json 之间的区别主要在于标头,它补充说this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});- 去图
2021-04-08 01:39:00
奇怪的是,这就是导致此问题的原因。
2021-04-11 01:39:00

我想我会将我的问题和解决方案添加到列表中。

我得到:Uncaught SyntaxError: Unexpected token <并且错误指向我的 ajax 成功语句中的这一行:

var total = $.parseJSON(response);

后来发现除了json结果,还有HTML和响应一起发送,因为我的PHP有错误。当您在 PHP 中遇到错误时,您可以将其设置为用巨大的橙色表警告您,而这些表是丢弃 JSON 的原因。

我只是通过执行 aconsole.log(response)来查看实际发送的内容来发现这一点。如果是 JSON 数据的问题,请尝试查看是否可以执行 console.log 或其他一些语句,以查看发送的内容和接收的内容。

我这样做了。我在我的 php 文件中的某处回显 json 并在我的响应中获取 php[//json data] 但我无法解析它。感谢您发布此信息,以便我可以找出自己的错误。
2021-03-25 01:39:00
OP问题完全不同。在您的情况下,您试图将 HTML 解析为 JSON,而在 OP 的情况下,他试图将 JSON 解析为 JavaScript。
2021-04-08 01:39:00