13 ответов:
эта конкретная ошибка является одним раздражающим фактом о V8. В большинстве случаев ваш JavaScript каким-то образом нарушается. Например, отсутствует
}или что-то подобное.приведенный пример, это также приведет к "неожиданному концу ввода":
eval('[{"test": 4}') // notice the missing ]но основная причина проблем, похоже, заключается в том, что запрошенный url JSON имеет Content-Type на
text/htmlкоторый Chrome, по-видимому, пытается разобрать как HTML, что затем приводит к неожиданному концу ввод из-за того, что изображение теги анализе.попробуйте установить Content-Type до
text/plainЯ думаю, что это должно исправить проблемы.тем не менее, V8 может сделать лучшую работу о том, чтобы сказать точно здесь вход неожиданно закончился.
посмотреть мой случай по другому аналогичный вопрос:
в моем случае я пытался разобрать пустой JSON:
JSON.parse(stringifiedJSON);другими словами, произошло следующее:
JSON.parse("");
Я получаю эту ошибку, когда я ommitted закрывающий символ скобки (
}) в коде JavaScript. Убедитесь, что ваши брекеты правильно сбалансированы.
для записи, для тех, кто пытается найти различные причины этой ошибки. Пустой атрибут данных HTML5
data-mydata = ''вызывает ошибку тоже. Вы должны проверить, когда значение данных является нулевой строкой и не включать атрибут вообще. Само собой разумеется, что это в значительной степени относится к сценарию сгенерированного HTML.
проблема для меня была в том, что я делал $.Аякс с
dataType: "json"для запроса POST, который возвращал HTTP 201 (созданный) и без тела запроса. Исправление состояло в том, чтобы просто удалить этот ключ/значение.
JSHint хорошо находит расположение отсутствующих скобок или плохой синтаксис.
еще одна причина этой ошибки: если ваш API намеренно отвечает без тела ответа, но отвечает с
200 OKкод состояния вместо204 No Contentкод состояния. Некоторые библиотеки JavaScript могут плохо реагировать на неожиданные типы контента, когда нет контента, поэтому используйте правильный код состояния!
там определенно будет открытая скобка, которая вызвала ошибку.
Я бы предложил вам открыть страницу в Firefox, а затем открыть Firebug и проверить консоль – она покажет отсутствующий символ.
пример скриншота:
моя проблема была с кешем Google Chrome. Я проверил это, запустив свое веб-приложение на Firefox, и я не получил эту ошибку там. Поэтому я решил попробовать очистить кэш Google Chrome, и это сработало.
Я столкнулся с аналогичной проблемой, используя директиву UI bootstrap для angularjs-uib-datepicker, при нажатии переключателя am/pm.
ошибка в обработчике событий для (неизвестно): SyntaxError: неожиданный конец Ввод в JSON углового элемента управления datepicker
оказалось, что это из-за плагина 'Trans-over' (что переводит слово при нажатии). Может быть, мой ответ кому-то поможет, потому что я ничего не нашел в интернете.
Так как это асинхронная операция
onreadystatechangeможет произойти до загрузки значения в responseText, попробуйте использоватьwindow.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);чтобы увидеть, если ошибка сохраняется? Бол
у меня была эта ошибка и исправил ее, добавив охранника на
readyStateиstatusпоказано здесь:var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // Your code here } };

Comments