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

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

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

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

Ответ 1

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

В приведенном примере это также приведет к "Неожиданному концу ввода":

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

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

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

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

Ответ 2

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

http://getfirebug.com/

Ответ 3

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

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

JSON.parse(stringifiedJSON);

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

JSON.parse("");

Ответ 4

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

Ответ 5

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

data-mydata = ''

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Пример скриншота:

Firebug highlighting the error

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

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

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

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

Ответ 13

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

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

Выключилось это из-за плагина "Транс-над" (который переводит слово при нажатии). Может быть, мой ответ поможет кому-то, потому что я ничего не нашел в Интернете.

Ответ 14

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

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

Ответ 15

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

Ответ 16

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

Ответ 17

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