Google Chromeに自分のページを読み込むと、コンソールに曖昧なエラーが表示されます。
不明なSyntaxError:予期しない入力の終わり
何が原因なのかわかりません。このエラーのデバッグ方法は?
この特定のエラーは v8 についての1つの迷惑な事実です。ほとんどの場合、あなたのJavaScriptは何らかの形で壊れています。例えば}
やそれに似たものがない。
与えられた例では、これも "予期しない入力の終わり"をもたらします。
eval('[{"test": 4}') // notice the missing ]
しかし、問題の根本的な原因は、リクエストされたJSONのURLがContent-Typeのtext/html
を持っているため、ChromeがHTMLとして解析しようとしているため、予期しない結果となっている含まれている画像タグが解析されているという事実による入力の.
Content-Typeをtext/plain
に設定してみてください。問題は解決するはずです。
それにもかかわらず、V8は正確にを指示することについてよりよい仕事をすることができました。入力は突然終了しました。
Mozilla用のFirebugを試してみてください。欠けている}
の位置が表示されます。
JavaScriptコードで右中括弧(}
)を省略した場合、このエラーが発生します。あなたのブレースが適切にバランスが取れていることを確認してください。
記録については、このエラーのさまざまな原因を見つけようとしている人のためのものです。空のHTML5データ属性
data-mydata = ''
エラーも発生します。データ値がNULL文字列で、属性がまったく含まれていない場合に確認する必要があります。言うまでもありませんが、これはスクリプトで生成されたHTMLに大きく関連しています。
私にとっての問題は、HTTP 201(作成済み)を返し、要求本体を返さないPOST要求に対してdataType: "json"
を使って$ .ajaxを実行していたことです。修正は単にそのキー/値を削除することでした。
JSHint は、括弧がない場所や構文が間違っている場所を見つけるのに適しています。
このエラーのもう1つの原因:APIが意図的に応答本体なしで応答したが、200 OK
ステータスコードではなく204 No Content
ステータスコードで応答した場合。 JavaScriptライブラリの中には、コンテンツがないと予期しないコンテンツタイプにうまく反応しない場合があるため、正しいステータスコードを使用してください。
間違いを起こした開き括弧が間違いなくあるでしょう。
Firefoxでページを開いてからFirebugを開いてコンソールを確認することをお勧めします - 不足している記号が表示されます。
スクリーンショットの例:
私の問題はGoogle Chromeのキャッシュにありました。私はFirefox上で私のWebアプリケーションを実行することによってこれをテストしました、そして私はそこにそのエラーを得ませんでした。それで、私はGoogle Chromeのキャッシュを空にすることを試みることに決めました、そして、それはうまくいきました。
これは非同期操作なので、responseTextに値がロードされる前にonreadystatechange
が発生する可能性があります。エラーが続くかどうかを確認するには、window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
を使用してみますか? BOL
Am/pmの切り替えを押すとき、私は同様の問題がangularjsのためのuiブートストラップ指令 - uib-datepickerの使用に直面しました。
(不明)のイベントハンドラでエラーが発生しました:SyntaxError:JSON入力角度タイムピッカーの予期せぬ終了
プラグイン 'Trans-over'(クリックされるとWordが翻訳される)が原因であることが判明しました。インターネットで何も見つけられなかったので、私の答えが誰かに役立つかもしれません。
anchorタグでエラーが発生した場合は、「Onclick」を「href」または「href」を「Onclick」に置き換えてください。
JavaScriptコードが1行に縮小されている場合、このエラーのもう1つの原因は、コメントに//
ではなく/**/
を使用することです。
悪い(あなたの関数の終わりの//
を含む}
の後のすべてをコメントアウトする)
function example() { //comment console.log('TEST'); }
良い(あなたのコメントを限定する)
function example() { /* comment */ console.log('TEST'); }
同じ問題に直面したときに、リクエストでAccept
ヘッダーをapplication/json
に設定することは私にとってはうまくいきました。
私はこのエラーを抱えていて、ここに示されているreadyState
とstatus
に対するガードを追加することによってそれを修正しました:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Your code here
}
};