语法错误:意外令牌<

时间:2013-09-01 18:34:01

标签: jquery ajax syntax token

我尝试了很多东西而且没办法,总是出现这个错误 我试图只使用一个选项来查看是否通过,更改了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

16 个答案:

答案 0 :(得分:104)

当您包含或发布到不存在的文件时,通常会发生这种情况。 服务器将返回带有

的常规html格式的“404 Not Found”
'<html></html>' 

标记。第一个人字形&lt;

如果您尝试将'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响应以检查它是否有效。

答案 1 :(得分:12)

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

此处示例:

 }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');
};

答案 2 :(得分:8)

我怀疑您是否正在接收文字/ html编码以回应您的请求,因此我认为问题是:

dataType : 'json',

尝试将其更改为

dataType : 'html',

来自http://api.jquery.com/jQuery.get/

的dataType 类型:字符串 服务器所需的数据类型。默认值:智能猜测(xml,json,脚本或html)。

答案 3 :(得分:5)

错误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以查看返回的内容。

答案 4 :(得分:2)

我有类似的问题,我的问题是我发送javascript来显示控制台消息。

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

希望这有助于某人!

答案 5 :(得分:2)

我怀疑你的一个脚本包含source map URL。 (例如,缩小的jQuery包含对源地图的引用。)

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

答案 6 :(得分:1)

此错误也可能源于对代码中出错的PHP脚本的JSON AJAX调用。服务器通常设置为返回使用html标记格式化的PHP错误信息。此响应被解释为无效的JSON,导致&#34;意外令牌&lt;&#34; AJAX错误。

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

答案 7 :(得分:1)

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

没有错误
<form action="path/to/file.php" id="ajaxformx">

通过将x添加到id值,jquery将不会处理它。

一旦确定一切正常,请从x中移除id="ajaxform"并清空action属性值

这是我几分钟前为自己排序相同错误的方法:)

答案 8 :(得分:1)

我在通过ajax发布表单时也有syntax error: unexpected token <。然后我用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);

答案 9 :(得分: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>

答案 10 :(得分:1)

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

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

答案 11 :(得分:0)

在java脚本函数中忽略参数传递为false

前:

function getCities(stateId,locationId=false){    

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

 }

避免写入locationId = false类型的语句,因为这会在chrome和IE中给出错误

答案 12 :(得分:0)

因为我遇到了同样的错误,但是出于非常不同的原因,我会把它扔进这里。

我通过node / express / jade服务并且已经移植了一个旧的玉文件。当Typekit失败时,其中一条线就是没有bork:

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

这似乎无害,但我终于意识到,对于你要添加内容的玉石脚本块,你需要.

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

简单,但很棘手。

答案 13 :(得分:0)

通过iframe加载的页面发生了这种情况。 iframe src页面有404脚本引用。显然我在父页面中找不到脚本引用,所以我花了一段时间才找到罪魁祸首。

答案 14 :(得分:0)

确保您没有在

之间包含jquery代码

&LT;脚本&gt; &LT; / script&gt;

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

答案 15 :(得分:0)

对我来说,上述解决方案都没有奏效,所以我不得不深入调查问题的根源,最后我发现了 router path

请检查您的路径 { path:"/register/onboard" ... } 不起作用,但 { path:"/register_onboard" ... } 起作用了。所以我不知道为什么它可能是一个包。