Chrome:キャッチされないSyntaxError:予期しない入力の終了


176

Google Chromeでページを読み込むと、コンソールに漠然としたエラーが表示されます。

キャッチされないSyntaxError:予期しない入力の終了

何が原因なのか、私にはわかりません。このエラーをデバッグするにはどうすればよいですか?


2
ネットワークスニファーで応答を確認すると、手掛かりが得られる場合があります。私の推測では、Content-lengthヘッダーが応答に含まれているよりも多くのバイトを指定している、またはおそらくサーバーが何らかの理由で無効なHTMLを送信しています。
tdammers

2
ほとんどの場合、}がありません(JavaScript)。クラスと関数の終わりを確認してください。スクリプトの最後に閉じる}を追加して、コードを再オートフォーマットしてみてください。コードに奇妙なインデントがある場合、その直前のどこかが、}がなくなっている可能性が高い場所です。
OG Sean

JSを正しくロードしないと、この問題が発生しました。私はそれをロードしましたが<script>https://example.com/a.js</script>、そうであったはずです<script src="https://example.com/a.js"></script>
ダニエル・アプト

今日、Googleスプレッドシートでこのエラーが発生しています。私の推測では、JSファイルの1つが非常に大きいため、完全に読み込まれずに終了します。または、いずれかのアプリサーバーにバグがあり、JSファイルが完全にダウンロードされる前にhttp接続を閉じています。
テディ

回答:


227

この特定のエラーは、 。ほとんどの場合、JavaScriptは何らかの方法で壊れています。たとえば、}そのような何かが欠けています。

与えられた例では、これも「予期しない入力の終了」をもたらします:

eval('[{"test": 4}') // notice the missing ]

しかし、問題の根本的な原因は、要求されたJSON urlに、ChromeがHTMLとして解析しようとしているContent-Typetext/html含まれていることであり、その結果、含まれているイメージタグが含まれているため、予期しない入力の終了が発生します。解析されました。

Content-Typetext/plain、問題が解決するはずだと思うように設定してみてください。

それにもかかわらず、V8は、入力が予期せず終了した正確な場所を正確伝えることで、より良い仕事をすることができます。


2
okありがとう、jsonリクエストをまとめて削除しましたが、エラーは解消しましたが、jsonリクエストの正確な問題はまだわかりません。どこからデバッグを開始すればよいかわからなかった。根本的な原因をどのように判断したのかを尋ねる場合
dlaurent86

2
それはそれほど明白ではないかもしれません。縮小化されていないJSは完全に合法で有効であったのに対し、縮小化されたJSは、最小化機能によって破損するため、このエラーが発生しました。残念ながら、Chromeはエラーが発生した行のみを表示します。これは、最小化されたJSの場合、通常はファイル全体です...
Cerin

入力が終了した場所はそれほどではありません(それが最後になるでしょう)。むしろ、が期待されているかを知ることは、トンに役立ちます。
AndrewS 2014年

私の尻尾を救った。その曖昧さにひどくイライラしてきました。ありがとう。
キプロス106 2014

4
JSON.parse(text)を使用していて、テキスト値が空の文字列だったため、同じエラーが発生しました
A Khudairy

73

Firebug for Mozillaを試してみてください}。欠けている位置が表示されます。

http://getfirebug.com/


12
Firebugは必要ありませんでした。Firefoxのコンソールは、どの行とどの文字が欠けているかを正確に教えてくれました
Dylan Valade

1
消防士も必要ありませんでした。firefoxコンソールctrl+shift+iが教えてくれます。
Benjamin Crouzier 2013年

1
警告、スクリプトが単一の巨大な行に最小化される場合、Firefoxが数分/時間/年の間ハングすることを期待してください。
Cerin

1
これは、これらの構文エラーを追跡する最も簡単な方法です
BentOnCoding

神よ、ありがとう。開発ツールに関しては、Firefoxに比べてChromeがはるかに進んでいるように感じます。しかし、この小さなことを正しく行えないのは驚くべきことです。大きな頭痛から私を救った!
イザイアリー

33

私のケースを別の同様の質問で参照しください:

私の場合、空のJSONを解析しようとしていました。

JSON.parse(stringifiedJSON);

言い換えれば、何が起こったのか:

JSON.parse("");

2
はい、これも食べました!空の文字列の代わりに "{}"を指定することで簡単に解決できます
cronoklee

1
URLに二重のスラッシュが含まれているために空のjsonを受信して​​いました(例:localhost:8080 // mypath / blagh)。サーバーはこれに対して空の応答を返していました。
jpierson

1
私はこの解決策を確認するためだけにここに来ました。
ルイス・アスンソン

10

}JavaScriptコードで右中かっこ()を省略した場合、このエラーが発生します。ブレースのバランスが適切であることを確認してください。


10

記録のために、このエラーのさまざまな原因を見つけようとしている人のために。空のHTML5データ属性

data-mydata = ''

エラーも引き起こします。データ値がnull文字列であり、属性をまったく含まない場合を確認する必要があります。言うまでもなく、これはスクリプトで生成されたHTMLに大きく関係しています。


あなたなしではこれを理解できなかったでしょう。私はVideoJSを使用しており、ビデオプレーヤーのhtmlをページからコピーしました。使用できるデータ属性のプレースホルダーがありましたが、そうではありませんでした。ビデオが読み込まれず、誰もが話しているエラーが発生しました。data-setup='{"example_option":true}' すべてを削除した後、うまくいきました。
タイラーBuchea

1
@ user1002379よろしくお願いします。
DroidOS 2015年

8

私にとっての問題はdataType: "json"、HTTP 201(作成済み)を返し、リクエスト本文がないPOSTリクエストに対して$ .ajaxを実行していたことです。修正は、単にそのキー/値を削除することでした。


ajaxリクエスト(アップロード)を開始し、完了する前に中止しましたが、このエラーが発生しました。
ダスティンポワサント2015年

6

JSHintは、欠落している括弧や不正な構文の場所を見つけるのに適しています。


6

このエラーの別の原因:APIが意図的に応答本文なしで応答したが、200 OKステータスコードではなくステータスコードで応答した204 No Content場合。一部のJavaScriptライブラリは、コンテンツがない場合、予期しないコンテンツタイプに適切に応答しない場合があるため、正しいステータスコードを使用してください。


3

エラーの原因となった開いているブラケットが必ず存在します。

Firefoxでページを開いてから、Firebugを開いてコンソールを確認することをお勧めします。不足しているシンボルが表示されます。

スクリーンショットの例:

エラーを強調するFirebug


2

私の問題はGoogle Chromeのキャッシュにありました。私はFirefoxでWebアプリケーションを実行してこれをテストしましたが、そこにエラーはありませんでした。それで私はGoogle Chromeのキャッシュを空にすることを決心し、それはうまくいきました。


1

JavaScriptコードが1行に縮小されている場合、このエラーの別の原因は、コメントの//代わりに使用/**/しています。

悪い(関数の//終了}を含めた後、すべてをコメントアウトする)

function example() { //comment console.log('TEST'); }

良い(コメントを制限する)

function example() { /* comment */ console.log('TEST'); }

さらに、キャスティングでも「the-text」を参照するため、「the-text」を使用する必要があります。

1

私の場合、javascriptを動的に追加し、文字列テンプレートで二重引用符を2回使用していたため、2番目の引用符を単一引用符に変更すると、エラーは発生しなくなりました。同じ理由でここに来る人々の一部に役立つことを願っています。


addthisを使用して、URLに二重文字列を追加してから単一引用符に変更すると、コンソールエラーが消えました
tfa

0

amjs / pmトグルを押すと、angularjsのuiブートストラップディレクティブ-uib-datepickerを使用して同様の問題に直面しました。

(不明)のイベントハンドラーのエラー:SyntaxError:予期しないJSON入力の終了角度タイムピッカー

プラグイン「Trans-over」(クリックすると単語を翻訳する)が原因であることが判明しました。インターネットで何も見つからなかったので、私の答えが誰かを助けるかもしれません。


0

これは非同期操作onreadystatechangeであるため、responseTextに値がロードされる前に発生する可能性がwindow.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); あります。a を使用して、エラーが続くかどうかを確認してください。BOL


0

私はこのエラーを持っていたし、上のガードを追加することによって、それを固定readyStateし、statusここに示されています:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};

0

アンカータグでエラーが発生した場合は、「Onclick」を「href」に、または「href」を「Onclick」に置き換えてください。



0

空のJSONを解析しようとすると、このエラーが発生する可能性があります。

サーバーなどからの応答を受け取ったら、まずそれが空でないかどうかを確認します。例えば:

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

それからあなたはフェッチすることができます:

fetch(url, options).then(parseJSON); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.