簡體   English   中英

語法錯誤:意外的令牌

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM