При загрузке моей страницы в 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 раза в строковых шаблонах, поэтому я изменил второй на одинарные кавычки, и ошибка исчезла. Я надеюсь, что это поможет некоторым людям, приезжающим сюда по той же причине.