[英]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.