При загрузке моей страницы в Google Chrome я получаю неопределенную ошибку в консоли:
Uncaught SyntaxError: Неожиданный конец ввода
Я понятия не имею, что это вызывает. Как я могу отладить эту ошибку?
При загрузке моей страницы в Google Chrome я получаю неопределенную ошибку в консоли:
Uncaught SyntaxError: Неожиданный конец ввода
Я понятия не имею, что это вызывает. Как я могу отладить эту ошибку?
Эта конкретная ошибка - один досадный факт о v8. В большинстве случаев ваш JavaScript каким-то образом нарушен. Например, пропустить } или что-то в этом роде.
В приведенном примере это также приведет к "Неожиданному концу ввода":
eval('[{"test": 4}') // notice the missing ]
Но основной причиной проблем, по-видимому, является то, что запрошенный URL-адрес JSON имеет тип содержимого text/html который Chrome, по-видимому, пытается проанализировать как HTML, что затем приводит к неожиданному завершению ввода из-за того, что включенное изображение теги анализируются.
Попробуйте установить Content-Type на text/plain Я думаю, что это должно решить проблемы.
Тем не менее, V8 лучше справился бы с задачей точно сказать, где ввод неожиданно закончился.
Попробуйте Firebug для Mozilla - он покажет положение отсутствующего }.
Смотрите мой случай на другой аналогичный вопрос:
В моем случае я пытался разобрать пустой JSON:
JSON.parse(stringifiedJSON);Другими словами, произошло следующее:
JSON.parse("");
Я получаю эту ошибку, когда я опускал символ закрытия (}) в JavaScript-коде.
Убедитесь, что ваши фигурные скобки сбалансированы.
Для записи, для тех, кто пытается найти различные причины этой ошибки. Пустой атрибут данных HTML5
data-mydata = ''
вызывает ошибку. Вы должны проверить, когда значение данных является пустой строкой и вообще не включает атрибут. Само собой разумеется, что это в значительной степени относится к script сгенерированным HTML.
Проблема для меня заключалась в том, что я делал $.ajax с dataType: "json" для запроса POST, который возвращал HTTP 201 (созданный) и без тела запроса. Исправить было просто удалить этот ключ/значение.
JSHint хорош в поиске местоположения отсутствующих скобок или плохого синтаксиса.
Другая причина этой ошибки: если ваш API намеренно отвечает без ответа, но отвечает кодом состояния 200 OK вместо кода состояния 204 No Content. Некоторые библиотеки JavaScript могут плохо реагировать на неожиданные типы содержимого, когда нет содержимого, поэтому используйте правильный код состояния!
Там обязательно будет открытая скобка, которая вызвала ошибку.
Я бы посоветовал открыть страницу в Firefox, затем открыть Firebug и проверить консоль - там будет отображаться отсутствующий символ.
Пример скриншота:

Моя проблема была с кешем Google Chrome. Я проверил это, запустив свое веб-приложение на Firefox, и там не было этой ошибки. Тогда я решил попробовать очистить кеш Google Chrome, и это сработало.
Поскольку это асинхронная операция onreadystatechange может произойти до того, как значение загрузилось в responseText, попробуйте использовать window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
чтобы проверить, сохраняется ли ошибка? BOL
В тех случаях, когда ваш код JavaScript сведен к одной строке, другой причиной этой ошибки является использование // вместо /**/ для ваших комментариев.
Плохо (закомментирует все после // включая закрытие } для вашей функции)
function example() { //comment console.log('TEST'); }
Хорошо (ограничивает ваш комментарий)
function example() { /* comment */ console.log('TEST'); }
Я столкнулся с аналогичной проблемой, используя директиву ui bootstrap для angularjs - uib-datepicker, при нажатии am/pm toggle.
Ошибка в обработчике событий для (неизвестно): SyntaxError: Неожиданный конец Вход JSON angular timepicker
Выключилось это из-за плагина "Транс-над" (который переводит слово при нажатии). Может быть, мой ответ поможет кому-то, потому что я ничего не нашел в Интернете.
У меня была эта ошибка, и я исправил ее, добавив охрану readyState и status показанный здесь:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Your code here
}
};
если вы получили ошибку в теге Anchor, просто замените "Onclick" на "href" или "href" на "Onclick"
Установка заголовка Accept для application/json в запросе работала для меня, когда я столкнулся с той же проблемой.
В моем случае я динамически добавлял javascript и использовал двойные кавычки 2 раза в строковых шаблонах, поэтому я изменил второй на одинарные кавычки, и ошибка исчезла. Я надеюсь, что это поможет некоторым людям, приезжающим сюда по той же причине.