私は多くのことを試してみましたが、方法がありません、私は渡されたかどうかを確認するために1つのオプションのみを使用しようとしたこのエラーが常に表示されます。
私はこのエラーについてインターネット上の様々な場所を調べましたが、それがなぜ起こっているのかを解決または理解できませんでした。私のPC上で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>'
タグ。最初のシェブロン<は有効なjsでも有効なjsonでもないため、予期しないトークンをトリガーします。
'funcoes/enquete_adm.php'を絶対URLに変更しようとした場合、念のため?
EDIT(数年後)
根本原因は常に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 Type:Stringサーバーから予想されるデータの種類です。デフォルト:Intelligent Guess(xml、json、script、またはhtml)。
エラーSyntaxError: Unexpected token <
はおそらく404などの理由で、APIエンドポイントがその文書本体にJSONを返さなかったことを意味します。
この場合、{
(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を送っていたということでした。
私のブラウザで(アプリケーションを通さずに)ファイルを見たときでさえも、それは思ったとおりに表示されていました(例えば、余分なタグは表示されませんでした)解析しました。
これが誰かに役立つことを願っています!
あなたのスクリプトの1つに ソースマップURL が含まれていると思います。 (Minified jQueryには、たとえばソースマップへの参照が含まれています。)
Chrome開発者ツールを開くと、Chromeはデバッグを支援するためにURLからソースマップを取得しようとします。ただし、ソースマップは実際にはサーバーに存在しませんが、代わりにHTMLを含む通常の404ページが送信されます。
私のコードからこの行を削除すると、問題が解決しました。
header("Content-Type: application/json; charset=UTF-8");
Ajax経由で投稿するときは、呼び出されるファイルが常に有効なデータ(json)を返し、html
タグやその他のタグによるエラーがないことを確認するために、通常は最初に送信することをお勧めします。
<form action="path/to/file.php" id="ajaxformx">
Id値にxを追加すると、jqueryはそれを処理しません。
すべて問題ないことが確認できたら、id="ajaxform"
からx
を削除し、空のaction
属性値を削除します。
これは私がちょうど数分前に自分自身のために同じエラーを分類した方法です:)
私はまたajaxを介してフォームを投稿しながらsyntax error: unexpected token <
を持っていました。それから私はそれが何を返すかを見るためにcurlを使った:
curl -X POST --data "firstName=a&lastName=a&[email protected]&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>
このエラーは、コードにエラーがあるAJAXスクリプトへのJSON PHP呼び出しからも発生する可能性があります。多くの場合、サーバーはHTMLマークアップでフォーマットされたPHPエラー情報を返すように設定されています。この応答は無効なJSONとして解釈され、 "予想外のトークン<" AJAXエラーが発生します。
Chromeを使用してPHPエラーを表示するには、Webインスペクタの[ネットワーク]パネルに移動し、左側に表示されているPHPファイルをクリックして[レスポンス]タブをクリックします。
私は同じエラーに遭遇しましたが、非常に異なる理由でここにこれを投げるつもりです。
私はnode/express/jade経由でサービスを提供しており、古いjadeファイルを移植しました。 Typekitが失敗したときに行の1つは栓をしないことでした。
script(type='text/javascript')
try{Typekit.load();}catch(e){}
それは十分に無害に思えました、しかし私は、コンテンツを追加しているジェイドスクリプトブロックのためにあなたが.
を必要とすることをついに実現しました:
script(type='text/javascript').
try{Typekit.load();}catch(e){}
単純だがトリッキーです。
間にjqueryコードを含めないでください。
<script> </ script>
もしそうならそれを取り除けばコードはうまくいくでしょう、それは私の場合はうまくいきました。
Javaスクリプト関数でfalseとして渡されるパラメーターを無視するだけです
例:
function getCities(stateId,locationId=false){
// Avoid writting locationId= false kind of statements
/*your code comes here*/
}
LocationId = falseの種類のステートメントを作成しないでください。これにより、chromeおよびIEでエラーが発生します。
これは、iframe経由でページが読み込まれたときに起こりました。 iframe srcページには404スクリプト参照がありました。明らかに私は親ページにスクリプトの参照を見つけることができなかったので、原因を見つけるのにしばらく時間がかかりました。