语法错误:意外令牌<


73

我已经尝试了很多事情,但没有办法,总是出现此错误,我尝试仅使用一个选项来查看是否通过,更改了jquery的调用,但没有。

我在互联网上的各个地方查看了此错误,但无法解决或了解其原因。在我的电脑上使用EasyPHP可以完美地工作,但是当我上网时却无法工作。

语法错误:意外令牌<

这是我的代码:

$(function(){
$('#salvar').click(function(){
    var key = 'salvar';
    var title = $('#title').val();
    var opcao1 = $('#opcao1').val();
    var opcao2 = $('#opcao2').val();
    var opcao3 = $('#opcao3').val();
    var opcao4 = $('#opcao4').val();
    var opcao5 = $('#opcao5').val();
    var opcao6 = $('#opcao6').val();

    if(title.length > 0){
        if(opcao2.length > 0){
            $('#resposta').removeClass().html('Salvando a enquete...<br clear="all"><br><img src="images/switch-loading.gif" />');
            $.ajax({
            type : 'POST',
            url : 'funcoes/enquete_adm.php',
            dataType : 'json',
            data: {key:key,title:title,opcao1:opcao1,opcao2:opcao2,opcao3:opcao3,opcao4:opcao4,opcao5:opcao5,opcao6:opcao6},
            success : function(data){
                if(data.sql == 'ok'){
                        $('#resposta').addClass('success-box').html('Enquete Salva!').fadeIn(1000);
                        $('#control').fadeOut();
                    }else if(data.sql == 'error'){
                        $('#resposta').addClass('info-box').html('Ops, aconteceu um erro. Por favor, tente novamente').fadeIn(1000);
                    }
                },
            error: function (XMLHttpRequest, textStatus, errorThrown) {    
                alert("XMLHttpRequest " + XMLHttpRequest[0]);alert(" errorThrown: " + errorThrown);alert( " textstatus : " + textStatus);    
            }
            });
        }else{
            $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções');
        };
    }else{
        $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete');
    };
    return false;

});
}); // End

它说控制台中的哪个文件?
塞尔吉奥2013年

1
错误应该为您提供了文件和行号,并发布了它指向的特定行。
帕特里克·埃文斯

我不记得我在哪里找到错误了。但是是在PHP代码。
GeovaneKrüger2014年

Answers:


116

当您包含或发布到不存在的文件时,通常会发生这种情况。服务器将返回一个常规的html格式的“ 404 Not Found”,并附带

'<html></html>' 

标签。第一个人字形<既不是有效的js也不是有效的json,因此会触发意外的令牌。

如果可以确保将“ funcoes / enquete_adm.php”更改为绝对网址怎么办?

编辑(数年后)

根本原因可能并不总是来自404错误。有时,您可以向API发出请求并接收HTML格式的错误。我偶然发现API端点应返回的几种情况

{
   error: "you must be authenticated to make this request"
}

与标题401。相反,我得到了

<html>You must be authenticated to make this request</html>

带标题200。

给定标头为200,您无法事先告知请求失败,因此您不得不尝试尝试JSON.parse响应以检查请求是否有效。


奇怪,因为我还有其他几个以相同方式使用JS URL的命令,并且效果很好,所以我给了你这个问题。并在我的PC上完美运行,当服务器无法工作时。
GeovaneKrüger2013年

谢谢。这对我有用。我拼错了我的js文件名。
lwdthe1

14

您有不必要的;(分号):

这里的例子:

 }else{
        $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções');
    };

尾随;}不正确。

这里的另一个例子:

}else{
    $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete');
};

8

我怀疑您正在根据请求获取文本/ html编码,因此我认为问题是:

dataType : 'json',

尝试将其更改为

dataType : 'html',

http://api.jquery.com/jQuery.get/中

dataType类型:String服务器期望的数据类型。默认值:Intelligent Guess(xml,json,脚本或html)。


6

该错误SyntaxError: Unexpected token <可能表示API端点未在其文档主体中返回JSON,例如由于404。

在这种情况下,它期望找到一个{(JSON的开头);相反,它找到了<(标题元素的开始)。

成功回应:

<html>
  <head></head>
  <body>
    {"foo": "bar", "baz": "qux"}
  </body>
</html>

找不到回应:

<html>
  <head></head>
  <body>
    <h1>Not Found</h1>
    <p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
  </body>
</html>

尝试在浏览器中访问数据端点的URL,以查看返回的内容。


2

我有一个类似的问题,我的问题是我正在发送JavaScript以显示控制台消息。

即使当我在浏览器中查看文件(而不是通过应用程序查看)时,它的显示也完全符合我的预期(例如,未显示额外的标签),但是在html / text输出中却显示了该文件,并且试图解析。

希望这对某人有帮助!


2

我怀疑您的脚本之一包含源映射URL。(例如,缩小的jQuery包含对源映射的引用。)

当您打开Chrome开发者工具时,Chrome会尝试从URL获取源地图,以帮助调试。但是,源映射实际上不在您的服务器上,而是会向您发送一个包含HTML的常规404页面。


1

此错误也可能是由对代码中有错误的PHP脚本的JSON AJAX调用引起的。通常将服务器设置为返回以html标记格式化的PHP错误信息。此响应被解释为无效的JSON,从而导致“意外的令牌<” AJAX错误。

要使用Chrome查看PHP错误,请转到Web检查器中的“网络”面板,单击左侧列出的PHP文件,然后单击“响应”选项卡。


1

通过ajax发布时,首先正常提交始终是一个好主意,以确保所调用的文件始终返回有效数据(json),并且html标签或其他内容没有错误

<form action="path/to/file.php" id="ajaxformx">

通过将x添加到id值,jquery将不会对其进行处理。

一旦确定一切正常,然后x从中删除fromid="ajaxform"并清空action属性值

几分钟前,这就是我为自己整理相同错误的方式:)


1

syntax error: unexpected token <通过ajax发布表单时,我也遇到了麻烦。然后,我使用curl查看返回的内容:

curl -X POST --data "firstName=a&lastName=a&email=array@f.com&pass=aaaa&mobile=12345678901&nID=123456789123456789&age=22&prof=xfd" http://handymama.co/CustomerRegistration.php

我得到这样的回应:

<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>3</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>4</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>8</b><br />

因此,我要做的只是将日志级别更改为仅错误而不是警告。

error_reporting(E_ERROR);

1

我检查了所有包含的JS路径

示例更改此

<script src="js/bootstrap.min.js" type="text/javascript"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script>

1

从我的代码中删除此行解决了我的问题。

header("Content-Type: application/json; charset=UTF-8"); 

0

因为我遇到了相同的错误,但是由于非常不同的原因,所以将其扔到这里。

我正在通过node / express / jade服务,并已移植了一个旧的玉文件。其中之一是当Typekit失败时不要惊慌:

script(type='text/javascript')
  try{Typekit.load();}catch(e){}

看起来足够无害,但是我终于意识到,对于要在其中添加内容的玉器脚本块,您需要一个.

script(type='text/javascript').
  try{Typekit.load();}catch(e){}

简单但棘手。


0

只需忽略Java脚本函数中作为false传递的参数

例如:

function getCities(stateId,locationId=false){    

    // Avoid writting locationId= false kind of statements
   /*your code comes here*/

 }

避免编写locationId = false语句,因为这会导致chrome和IE中的错误


0

这发生在我通过iframe加载的页面上。iframe src页面具有404脚本参考。显然我无法在父页面中找到脚本引用,因此花了我一段时间才找到了罪魁祸首。


0

确保您没有在

<脚本> </脚本>

如果是这样的话,删除它,代码将正常工作,在我的情况下有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.