[英]syntax error: unexpected 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
当您包含或发布到不存在的文件时,通常会发生这种情况。 服务器将返回一个常规的 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
来检查响应是否有效。
你有不必要的;
(分号):
这里的例子:
}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');
};
我怀疑您收到了 text/html 编码以响应您的请求,所以我认为问题是:
dataType : 'json',
尝试将其更改为
dataType : 'html',
从http://api.jquery.com/jQuery.get/ :
dataType 类型:字符串 预期来自服务器的数据类型。 默认值:智能猜测(xml、json、脚本或 html)。
错误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 以查看返回的内容。
我有一个类似的问题,我的问题是我正在发送 javascript 来显示控制台消息。
即使我在浏览器中(不是通过应用程序)查看文件时,它也完全按照我的预期显示(例如,没有显示额外的标签),但是在 html/text 输出中显示并试图解析。
希望这可以帮助某人!
我怀疑您的脚本之一包含源映射 URL 。 (例如,缩小的 jQuery 包含对源映射的引用。)
当您打开 Chrome 开发者工具时,Chrome 会尝试从 URL 中获取源映射以帮助调试。 但是,源映射实际上并不存在于您的服务器上,而是向您发送了一个包含 HTML 的常规 404 页面。
此错误也可能由对代码中存在错误的 PHP 脚本的 JSON AJAX 调用引起。 服务器通常设置为返回用 html 标记格式化的 PHP 错误信息。 此响应被解释为无效的 JSON,从而导致“意外令牌 <”AJAX 错误。
要使用 Chrome 查看 PHP 错误,请转到 Web 检查器中的“网络”面板,单击左侧列出的 PHP 文件,然后单击“响应”选项卡。
通过 ajax 发布时,首先正常提交总是一个好主意,以确保被调用的文件始终返回有效数据 (json) 并且没有html
标签或其他错误
<form action="path/to/file.php" id="ajaxformx">
通过将 x 添加到 id 值,jquery 不会处理它。
一旦你确定一切正常,然后从id="ajaxform"
删除x
并清空action
属性值
这就是我几分钟前为自己整理相同错误的方式:)
我也有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);
我检查了所有包含的 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>
从我的代码中删除这一行解决了我的问题。
header("Content-Type: application/json; charset=UTF-8");
只需忽略在 java 脚本函数中作为 false 传递的参数
前任:
function getCities(stateId,locationId=false){
// Avoid writting locationId= false kind of statements
/*your code comes here*/
}
避免编写 locationId= false 类型的语句,因为这会在 chrome 和 IE 中产生错误
只是想把它扔在这里,因为我遇到了同样的错误,但出于非常不同的原因。
我通过 node/express/jade 提供服务,并且已经移植了一个旧的 jade 文件。 当 Typekit 失败时,其中一条线是不要无聊:
script(type='text/javascript')
try{Typekit.load();}catch(e){}
这似乎无害,但我终于意识到,对于要添加内容的玉石脚本块,您需要一个.
:
script(type='text/javascript').
try{Typekit.load();}catch(e){}
简单,但很棘手。
这发生在我身上,通过 iframe 加载了一个页面。 iframe src 页面有一个 404 脚本引用。 显然我在父页面中找不到脚本引用,所以我花了一段时间才找到罪魁祸首。
确保您不包括 jquery 代码之间
<脚本> </脚本>
如果是这样,删除它并且代码将正常工作,它在我的情况下工作。
对我来说,上面的解决方案都没有奏效,所以我不得不深入调查我的问题的根源,最后我发现了router path
。
请检查您的路径{ path:"/register/onboard" ... }
但{ path:"/register_onboard" ... }
不起作用。 所以我不知道为什么它可能是一个包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.