83

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

16 回答 16

121

这通常发生在您包含或发布到不存在的文件时。服务器将返回一个常规的 html 格式的“404 Not Found”,其中包含

'<html></html>' 

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

如果您尝试将 'funcoes/enquete_adm.php' 更改为绝对 url 会怎样?

编辑(几年后)

根本原因可能并不总是来自 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检查响应是否有效。

于 2013-09-01T18:55:49.300 回答
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');
};
于 2013-09-01T18:45:05.030 回答
8

我怀疑您正在响应您的请求获得 text/html 编码,所以我认为问题是:

dataType : 'json',

尝试将其更改为

dataType : 'html',

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

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

于 2015-02-25T14:19:59.500 回答
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 以查看返回的内容。

于 2016-01-21T23:15:35.890 回答
3

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

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

希望这对某人有帮助!

于 2014-06-11T13:29:39.703 回答
2

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

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

于 2014-06-11T13:44:53.410 回答
1

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

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

于 2015-02-06T04:36:02.237 回答
1

通过 ajax 发布时,最好先正常提交,以确保被调用的文件始终返回有效数据 (json) 并且没有html标签或其他错误

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

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

一旦你确定一切都很好,然后删除xfromid="ajaxform"并清空action属性值

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

于 2015-02-13T11:54:57.093 回答
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);
于 2015-05-03T08:42:08.427 回答
1

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

header("Content-Type: application/json; charset=UTF-8"); 
于 2016-02-25T10:31:09.587 回答
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>
于 2016-02-16T05:49:39.937 回答
0

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

前任:

function getCities(stateId,locationId=false){    

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

 }

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

于 2014-02-22T04:49:29.983 回答
0

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

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

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

这似乎无伤大雅,但我终于意识到,对于要添加内容的玉脚本块,您需要一个.

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

简单,但很棘手。

于 2014-09-15T23:44:44.130 回答
0

对我来说,上述解决方案都不起作用,所以我不得不深入调查问题的根源,最终我解决了router path

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

于 2021-05-22T20:10:01.817 回答
0

确保您没有在

<脚本></脚本>

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

于 2016-02-06T13:48:31.317 回答
0

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

于 2015-11-01T09:41:45.357 回答