Chrome: Uncaught SyntaxError: неожиданный конец ввода

При загрузке своей страницы в Google Chrome я получаю в консоли невнятную ошибку:

Uncaught SyntaxError: неожиданный конец ввода

Понятия не имею, чем это вызвано. Как мне отладить эту ошибку?


person dlaurent86    schedule 29.08.2010    source источник
comment
Проверка ответа в сетевом сниффере может дать вам ключ к разгадке. Я предполагаю, что заголовок Content-length указывает больше байтов, чем содержит ответ, или, возможно, сервер каким-то образом отправляет недопустимый HTML.   -  person tdammers    schedule 29.08.2010
comment
Чаще всего отсутствует} (javascript). Проверьте конец ваших классов и функций. Попробуйте просто добавить еще один закрывающий} в конце вашего скрипта и повторно автоформатируйте ваш код. Если в вашем коде есть какие-то странные отступы, то где-то прямо перед ним, скорее всего, пропало место}.   -  person OG Sean    schedule 26.07.2018
comment
У меня возникла эта проблема при неправильной загрузке JS. Я загрузил его как <script>https://example.com/a.js</script> и должно было быть <script src="https://example.com/a.js"></script>   -  person Daniel Apt    schedule 11.09.2018
comment
Сегодня я получаю эту ошибку в Google Таблицах. Я предполагаю, что один из их JS-файлов настолько велик, что его работа прекращается без полной загрузки. Или один из их серверов приложений имеет ошибку и закрывает http-соединение до того, как файл JS будет полностью загружен.   -  person Teddy    schedule 29.04.2020


Ответы (19)


Эта конкретная ошибка является раздражающим фактом в отношении v8. В большинстве случаев ваш JavaScript каким-то образом не работает. Например, отсутствует } или что-то в этом роде.

Приведенный пример также приведет к «Неожиданному окончанию ввода»:

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

Но основная причина проблем, похоже, заключается в том, что запрошенный URL-адрес JSON имеет Content-Type text/html, который Chrome, по-видимому, пытается проанализировать как HTML, что затем приводит к неожиданному завершению ввода из-за факт, что включенные теги изображений анализируются.

Попробуйте установить для Content-Type значение text/plain. Думаю, это должно решить проблемы.

Тем не менее, V8 мог бы лучше справиться с задачей, сообщая одному точно, где неожиданное завершение ввода.

person Ivo Wetzel    schedule 29.08.2010
comment
ОК Большое спасибо, я удалил json-запрос все вместе, и ошибка исчезла, мне еще предстоит выяснить, что именно не так с моим json-запросом. я просто не знал, с чего начать отладку. если я могу спросить, как вы определили основную причину - person dlaurent86; 29.08.2010
comment
Это может быть не так очевидно. Я получил эту ошибку на минифицированном JS из-за того, что он был искажен минимизатором, тогда как неминифицированный JS был совершенно законным и действительным. К сожалению, Chrome показывает только строку, в которой возникает ошибка, которая для минимизированного JS обычно представляет собой весь файл ... - person Cerin; 08.01.2014
comment
Не так уж много там, где закончился ввод (потому что это было бы в конце). Скорее, знание того, что ожидается, поможет тоннам. - person AndrewS; 10.06.2014
comment
Спас мой хвост. Меня ужасно раздражала двусмысленность. Спасибо. - person Cyprus106; 20.08.2014
comment
У меня была такая же ошибка, потому что я использовал JSON.parse (текст), а текстовое значение было пустой строкой - person A Khudairy; 24.02.2015
comment
Я получаю эту ошибку только в Chrome, а firefox чист, и только у некоторых клиентов Chrome есть эта проблема. Я хочу изменить тип содержимого, как вы предлагаете, но я не могу понять, где необходимо внести необходимые изменения для текста / простого - я использую aws s3 и cloudfront для обслуживания страниц - и этот источник ошибки находится в файлы angularjs, загруженные с cdn, а не с пользовательской конечной точки на моем сервере - пожалуйста, помогите - person Abdeali Chandanwala; 23.04.2019
comment
Content-Type text / plain позволяет webView отображать все коды как простой текст, вместо этого вы должны использовать text / HTML или text / javascript, а также text / css. - person Bay; 17.09.2019

Попробуйте Firebug для Mozilla - он покажет положение отсутствующего }.

http://getfirebug.com/

person Community    schedule 22.07.2011
comment
Не нужен Firebug. Консоль в Firefox сообщила мне, какая именно строка и какой символ отсутствуют. - person Dylan Valade; 03.04.2013
comment
Огнестрельный тоже не понадобился. Консоль firefox ctrl+shift+i сообщит вам об этом. - person Benjamin Crouzier; 15.10.2013
comment
Предупреждение: если сценарий свернут до одной огромной строки, ожидайте, что Firefox зависнет в течение нескольких минут / часов / лет. - person Cerin; 08.01.2014
comment
Это, безусловно, самый простой способ отследить эти синтаксические ошибки. - person BentOnCoding; 28.08.2014
comment
Боже мой, спасибо. Мне кажется, что Chrome далеко впереди по сравнению с Firefox с точки зрения инструментов разработчика. это удивительно, как он не может понять эту мелочь правильно. спасла меня от большой головной боли! - person Isaiah Lee; 17.06.2015
comment
Очень полезный ответ .. !! - person Tejas Sutar; 25.07.2016

См. мой случай на другом аналогичном вопрос:

В моем случае я пытался разобрать пустой JSON:

JSON.parse(stringifiedJSON);

Другими словами, произошло следующее:

JSON.parse("");
person falsarella    schedule 30.05.2015
comment
Да, у меня тоже была эта! Вы можете легко решить, указав {} вместо пустой строки - person cronoklee; 22.06.2015
comment
Я получал пустой json из-за двойной косой черты в URL-адресе (например, localhost: 8080 // mypath / blagh), и сервер возвращал для этого пустой ответ. - person jpierson; 22.11.2015
comment
Я пришел сюда, чтобы подтвердить это решение. - person Luís Assunção; 15.03.2016

Я получаю эту ошибку, когда пропускаю закрывающую скобку (}) в коде JavaScript. Убедитесь, что ваши подтяжки правильно сбалансированы.

person HBP    schedule 29.08.2010

Для записи, для всех, кто пытается найти различные причины этой ошибки. Пустой атрибут данных HTML5

data-mydata = ''

тоже вызывает ошибку. Вы должны проверить, является ли значение данных пустой строкой и вообще не включать атрибут. Само собой разумеется, что это в значительной степени относится к HTML, сгенерированному сценарием.

person DroidOS    schedule 12.06.2013
comment
Никогда бы не понял этого без тебя. Я использовал VideoJS и скопировал html для их видеоплеера с их страницы. У него был заполнитель атрибутов данных, который вы могли использовать, а я нет. Видео не загружалось, и я получал ошибку, о которой все говорят. После удаления data-setup='{"example_option":true}' все отлично заработало. - person Tyler Buchea; 09.03.2015
comment
@ user1002379, рад, что смог помочь. - person DroidOS; 09.03.2015

Проблема для меня заключалась в том, что я делал $ .ajax с dataType: "json" для запроса POST, который возвращал HTTP 201 (создан), а тело запроса не было. Исправление заключалось в том, чтобы просто удалить этот ключ / значение.

person Blaskovicz    schedule 15.02.2014
comment
Я запустил запрос ajax (загрузку) и прервал его до его завершения, и я получил эту ошибку. - person Dustin Poissant; 15.03.2015

JSHint отлично подходит для определения местоположения отсутствующих скобок или неправильного синтаксиса.

person Harfatum    schedule 03.10.2014

Другая причина этой ошибки: если ваш API намеренно отвечает без тела ответа, но отвечает кодом состояния 200 OK вместо кода состояния 204 No Content. Некоторые библиотеки JavaScript могут плохо реагировать на неожиданные типы содержимого при отсутствии содержимого, поэтому используйте правильный код состояния!

person Andrew    schedule 21.04.2016

Обязательно будет открытая скобка, которая вызвала ошибку.

Я бы посоветовал вам открыть страницу в Firefox, затем открыть Firebug и проверить консоль - там будет отсутствующий символ.

Пример снимка экрана:

Firebug выделяет ошибку

person Manoj Dhiman    schedule 01.07.2015

Моя проблема была с кешем Google Chrome. Я протестировал это, запустив свое веб-приложение в Firefox, и у меня не было этой ошибки. Тогда я решил попробовать очистить кеш Google Chrome, и это сработало.

person Amir Al    schedule 28.04.2018

В тех случаях, когда ваш код JavaScript минимизирован до одной строки, другой причиной этой ошибки является использование // вместо /**/ для ваших комментариев.

Плохо (комментирует все после //, включая закрывающий } для вашей функции)

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

Хорошо (ограничивается вашим комментарием)

function example() { /* comment */ console.log('TEST'); }
person Johan Doe    schedule 07.02.2019
comment
Работает, Плюс, вы должны использовать \ the-text \, поскольку относится к тексту также для приведения. - person Bay; 17.09.2019

В моем случае я динамически добавлял javascript и 2 раза использовал двойные кавычки в строковых шаблонах, поэтому я заменил вторую кавычки на одинарные, и ошибка исчезла. Я надеюсь, что это поможет некоторым людям, приезжающим сюда по той же причине.

person George_kane    schedule 04.10.2019
comment
используя addthis, я добавил к URL-адресу двойную строку, а затем изменил ее на одинарную кавычку, и ошибка консоли исчезла - person tfa; 23.04.2020

Причиной этой ошибки может быть попытка разобрать пустой JSON.

Когда вы получаете ответ от сервера или чего-то еще, сначала проверьте, не пуст ли он. Например:

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

Затем вы можете получить с помощью:

fetch(url, options).then(parseJSON); 
person rivelbab    schedule 12.12.2019

Я столкнулся с аналогичной проблемой с использованием директивы ui bootstrap для angularjs - uib-datepicker при нажатии переключателя am / pm.

Ошибка в обработчике событий для (неизвестно): SyntaxError: Неожиданный конец входного JSON angular timepicker

Оказалось, это из-за плагина 'Trans-over' (который переводит слово при нажатии). Может мой ответ кому-то поможет, ведь в интернете я ничего не нашла.

person OlehZiniak    schedule 18.07.2016

Поскольку это асинхронная операция, onreadystatechange может произойти до того, как значение будет загружено в responseText, попробуйте использовать window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);, чтобы узнать, сохраняется ли ошибка? BOL

person safhac    schedule 01.12.2016

У меня была эта ошибка, и я исправил ее, добавив защиту на readyState и status, показанные здесь:

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

если вы получили ошибку в теге Anchor, просто замените «Onclick» на «href» или «href» на «Onclick»

person Harsha Annareddy    schedule 27.03.2019

Установка заголовка Accept на application/json в запросе у меня сработала, когда я столкнулся с той же проблемой.

person Stefano Populin    schedule 22.05.2019

В моем случае у меня была низкая скорость интернета, когда я отключаю интернет-соединение другого пользователя, ошибка исчезла, странно

person Shahid Islam    schedule 11.08.2020