При загрузке своей страницы в Google Chrome я получаю в консоли невнятную ошибку:
Uncaught SyntaxError: неожиданный конец ввода
Понятия не имею, чем это вызвано. Как мне отладить эту ошибку?
При загрузке своей страницы в Google Chrome я получаю в консоли невнятную ошибку:
Uncaught SyntaxError: неожиданный конец ввода
Понятия не имею, чем это вызвано. Как мне отладить эту ошибку?
Эта конкретная ошибка является раздражающим фактом в отношении v8. В большинстве случаев ваш JavaScript каким-то образом не работает. Например, отсутствует }
или что-то в этом роде.
Приведенный пример также приведет к «Неожиданному окончанию ввода»:
eval('[{"test": 4}') // notice the missing ]
Но основная причина проблем, похоже, заключается в том, что запрошенный URL-адрес JSON имеет Content-Type text/html
, который Chrome, по-видимому, пытается проанализировать как HTML, что затем приводит к неожиданному завершению ввода из-за факт, что включенные теги изображений анализируются.
Попробуйте установить для Content-Type значение text/plain
. Думаю, это должно решить проблемы.
Тем не менее, V8 мог бы лучше справиться с задачей, сообщая одному точно, где неожиданное завершение ввода.
Попробуйте Firebug для Mozilla - он покажет положение отсутствующего }
.
ctrl+shift+i
сообщит вам об этом.
- person Benjamin Crouzier; 15.10.2013
См. мой случай на другом аналогичном вопрос:
В моем случае я пытался разобрать пустой JSON:
JSON.parse(stringifiedJSON);
Другими словами, произошло следующее:
JSON.parse("");
Я получаю эту ошибку, когда пропускаю закрывающую скобку (}
) в коде JavaScript. Убедитесь, что ваши подтяжки правильно сбалансированы.
Для записи, для всех, кто пытается найти различные причины этой ошибки. Пустой атрибут данных HTML5
data-mydata = ''
тоже вызывает ошибку. Вы должны проверить, является ли значение данных пустой строкой и вообще не включать атрибут. Само собой разумеется, что это в значительной степени относится к HTML, сгенерированному сценарием.
data-setup='{"example_option":true}'
все отлично заработало.
- person Tyler Buchea; 09.03.2015
Проблема для меня заключалась в том, что я делал $ .ajax с dataType: "json"
для запроса POST, который возвращал HTTP 201 (создан), а тело запроса не было. Исправление заключалось в том, чтобы просто удалить этот ключ / значение.
JSHint отлично подходит для определения местоположения отсутствующих скобок или неправильного синтаксиса.
Другая причина этой ошибки: если ваш API намеренно отвечает без тела ответа, но отвечает кодом состояния 200 OK
вместо кода состояния 204 No Content
. Некоторые библиотеки JavaScript могут плохо реагировать на неожиданные типы содержимого при отсутствии содержимого, поэтому используйте правильный код состояния!
Обязательно будет открытая скобка, которая вызвала ошибку.
Я бы посоветовал вам открыть страницу в Firefox, затем открыть Firebug и проверить консоль - там будет отсутствующий символ.
Пример снимка экрана:
Моя проблема была с кешем Google Chrome. Я протестировал это, запустив свое веб-приложение в Firefox, и у меня не было этой ошибки. Тогда я решил попробовать очистить кеш Google Chrome, и это сработало.
В тех случаях, когда ваш код JavaScript минимизирован до одной строки, другой причиной этой ошибки является использование //
вместо /**/
для ваших комментариев.
Плохо (комментирует все после //
, включая закрывающий }
для вашей функции)
function example() { //comment console.log('TEST'); }
Хорошо (ограничивается вашим комментарием)
function example() { /* comment */ console.log('TEST'); }
В моем случае я динамически добавлял javascript и 2 раза использовал двойные кавычки в строковых шаблонах, поэтому я заменил вторую кавычки на одинарные, и ошибка исчезла. Я надеюсь, что это поможет некоторым людям, приезжающим сюда по той же причине.
Причиной этой ошибки может быть попытка разобрать пустой JSON.
Когда вы получаете ответ от сервера или чего-то еще, сначала проверьте, не пуст ли он. Например:
function parseJSON(response) {
if (response.status === 204 || response.status === 205) {
return null;
}
return response.json();
}
Затем вы можете получить с помощью:
fetch(url, options).then(parseJSON);
Я столкнулся с аналогичной проблемой с использованием директивы ui bootstrap для angularjs - uib-datepicker при нажатии переключателя am / pm.
Ошибка в обработчике событий для (неизвестно): SyntaxError: Неожиданный конец входного JSON angular timepicker
Оказалось, это из-за плагина 'Trans-over' (который переводит слово при нажатии). Может мой ответ кому-то поможет, ведь в интернете я ничего не нашла.
Поскольку это асинхронная операция, onreadystatechange
может произойти до того, как значение будет загружено в responseText, попробуйте использовать window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
, чтобы узнать, сохраняется ли ошибка? BOL
У меня была эта ошибка, и я исправил ее, добавив защиту на 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
в запросе у меня сработала, когда я столкнулся с той же проблемой.
В моем случае у меня была низкая скорость интернета, когда я отключаю интернет-соединение другого пользователя, ошибка исчезла, странно
Content-length
указывает больше байтов, чем содержит ответ, или, возможно, сервер каким-то образом отправляет недопустимый HTML. - person tdammers   schedule 29.08.2010<script>https://example.com/a.js</script>
и должно было быть<script src="https://example.com/a.js"></script>
- person Daniel Apt   schedule 11.09.2018