Ошибка JavaScript (Uncaught SyntaxError: Неожиданный конец ввода)

211

У меня есть некоторый код JavaScript, который работает в FireFox, но не в Chrome или IE.

В консоли Chrome JS я получаю следующую ошибку:

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

Код JavaScript, который я использую:

<script>
 $(function() {
 $("#mewlyDiagnosed").hover(function() {
    $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
 }, function() {
    $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
 });
</script>

Это говорит об ошибке в последней строке, которая });

Phillip
источник
2
Я знаю, что Chrome V8 для DELETEсервера, если бы ответ был 200 successвместо 204, success - no response я бы также получил эту ошибку. Просто хедз-ап на случай, если кто-то тоже это получит.
Эрик Д. Джонсон

Ответы:

402

Добавьте секунду });.

При правильном отступе ваш код читает

$(function() {
    $("#mewlyDiagnosed").hover(function() {
        $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
    }, function() {
        $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
    });
MISSING!

Вы никогда не закрывали внешнее $(function() {.

SLaks
источник
278
Урок заключается в том, чтобы всегда делать отступы для вашего кода (и делать отступы правильно).
Слоты
4
О, чувак, я бы хотел, чтобы мой VIM обнаружил эту синтаксическую ошибку. Я не могу поверить, сколько времени я теряю иногда из-за неосторожных синтаксических ошибок.
HeyWatchThis
4
Урок заключается в том, чтобы всегда использовать хороший редактор с хорошими плагинами, который может обнаружить пару скобок, выделить ее или даже исправить проблемы.
Славомир Ленарт
1
@HeyWatchThis Вы можете попробовать Syntastic для Vim.
Натан Лонг
1
Я использую neomake для vim / neovim, настроенный на запуск jshint при каждом сохранении файла JavaScript. Если у меня есть синтаксические ошибки, я буду видеть символы предупреждения / ошибки в канаве vim's / neovim. Когда я наведу курсор на эту строку, в командной строке vim / neovim будет показано сообщение об ошибке.
trusktr
89

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

JSON.parse(stringifiedJSON);

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

JSON.parse("");
falsarella
источник
3
К сожалению, это включает $.parseJSONв себя JQuery 1.11.2
Насер аль-Wohaibi
37

http://jsbeautifier.org/ полезен для отступа вашего уменьшенного кода JS.

Кроме того, с Google Chrome вы можете использовать «симпатичный принт». Посмотрите на пример скриншота ниже, показывающий jquery.min.jsиз переполнения стека, с хорошим отступом прямо из моего браузера :)

введите описание изображения здесь

Хьюго
источник
14

Немного отформатировав код, вы только закрыли функцию внутреннего наведения. Вы не закрыли внешние части, отмеченные ниже:

$(// missing closing)
 function() { // missing closing }
     $("#mewlyDiagnosed").hover(
        function() {
            $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
        }, 
        function() {
            $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
        });
hvgotcodes
источник
5

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

Еко
источник
3

Я получил эту ошибку, когда пытался написать букмарклет javascript. Я не мог понять, что было причиной этого. Но в конце концов я попробовал URL-кодировку букмарклета через следующий веб-сайт: http://mrcoles.com/bookmarklet/, а затем ошибка исчезла, так что, возможно, это проблема с определенными символами в коде javascript, интерпретируемыми как специальный URL-адрес управляющие персонажи.

user280109
источник
2
У меня был // комментарий в моем js, который закомментировал немного больше, чем я хотел, поскольку вставка его в URL букмарклета сделала весь код однострочным, а // находился в середине кода.
Мфлодин
Удаление комментариев исправило это и для меня.
Алекс
3

Эта ошибка в основном вызвана пустыми возвращенными вызовами ajax при попытке проанализировать пустой JSON.

Чтобы решить этот тест, если возвращенные данные пусты

$.ajax({
    url: url,
    type: "get",
    dataType: "json",
    success: function (response) {

        if(response.data.length == 0){
            // EMPTY
        }else{
            var obj =jQuery.parseJSON(response.data);
            console.log(obj);
        }
    }
});
Джимми Обонё Абор
источник
3

В моем случае это было вызвано отсутствием (0) в javascript:void(0)якоре.

Сэм
источник
0

Я получил это, так как у меня был комментарий в файле, который я добавлял в свой JS, действительно неловкая причина того, что происходило - хотя, нажимая на VMфайл, который предварительно отрендерен и ловит ошибку, вы узнаете, что именно ошибка была, в моем случае это просто раскомментирование некоторого кода, который я использовал.

Джек Хейлз
источник
0

Я также получил эту ошибку, указывающую на конец последнего блока скрипта на странице, только для того, чтобы понять, что ошибка на самом деле заключалась в нажатии на элемент с onclick="pagename"вместо onclick="window.location='pagename'". Это не всегда пропущенная скобка!

justanotherguy
источник