Uncaught SyntaxError: Неожиданный токен:

Я выполняю вызов AJAX в моем скрипте MooTools, он отлично работает в Firefox, но в Chrome я получаю сообщение об ошибке Uncaught SyntaxError: Unexpected token :, я не могу определить, почему. Комментирование кода, чтобы определить, где находится плохой код, ничего не дает, я думаю, это может быть проблема с возвращаемым JSON. Проверяя консоль, я вижу, что возвращенный JSON выглядит следующим образом:

{"votes":47,"totalvotes":90}

Проблем с ней не вижу, почему возникла эта ошибка?

vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });

  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});

person trobrock    schedule 29.06.2010    source источник
comment
JSON в порядке. Проблема, вероятно, в том, как вы с этим справляетесь. Показ кода поможет.   -  person tcooc    schedule 29.06.2010
comment
К вопросу добавлен фрагмент кода.   -  person trobrock    schedule 29.06.2010
comment
Кажется, нет ничего плохого в синтаксисе, JS или JSON. Поможет публикация (не) рабочего тестового примера на jsfiddle.net, включая HTML.   -  person Oskar Krawczyk    schedule 29.06.2010
comment
Вы можете проверить сайт, на котором возникают проблемы, здесь: trobrock.com:8011 нажмите Cat 1, а затем проблему происходит при нажатии на голосование, и пока что проблема только в хроме   -  person trobrock    schedule 30.06.2010
comment
В настоящее время я подключаюсь к Интернету, поэтому мой модем сжимает исходный код HTML веб-сайтов, которые я просматриваю, поэтому я не могу понять код. Но для начала поместите каждый JS-код во внешние файлы - это всегда упрощает отладку - вы будете знать, вызвана ли ошибка JS или чем-то еще.   -  person Oskar Krawczyk    schedule 30.06.2010
comment
Неожиданный токен, вероятно, представляет собой недопустимый код символа. Такой код, скорее всего, не появится при печати на консоли. Поэтому распечатывайте строку по одному символу за раз или используйте анализатор протокола, отладчик и т. Д., Чтобы увидеть фактические байты строки.   -  person GroovyDotCom    schedule 11.02.2011


Ответы (22)


Видя красные ошибки

Uncaught SyntaxError: Неожиданный токен ‹

на вкладке консоли разработчика Chrome есть указание на HTML в теле ответа.

На самом деле вы видите реакцию вашего браузера на неожиданную верхнюю строку <!DOCTYPE html> с сервера.

person andy magoon    schedule 28.10.2014
comment
Понятия не имею, почему вы говорите о неожиданном токене ‹, когда вопрос касается Unexpected token :. Ваш ответ совершенно не связан с проблемой OP. - person Michał Perłakowski; 29.12.2015
comment
И как мне это исправить? У меня есть перенаправление php, которое вызывает это в Chrome. - person Works for a Living; 08.03.2016
comment
Чтобы добавить к @andy_magoon, в моем случае у меня был тег скрипта, который должен был обслуживать javascript, но потому что запрос был перенаправлен на HTML-страницу (не важно, почему он был перенаправлен), который начинается с ‹! DOCTYPE html ›, Что не является допустимым javascript, браузер возвращает SyntaxError, когда пытается проанализировать HTML как JS. - person david.barkhuizen; 04.04.2016
comment
@Thom Способ исправить это - убедиться, что HTTP get возвращает искомый файл javascript, а не неожиданный HTML. - person david.barkhuizen; 04.04.2016
comment
Я получил именно эту ошибку, потому что, как оказалось, путь к файлу неверен, и он не может найти файл, указанный в теге скрипта. - person newman; 25.01.2017
comment
у меня была 301 redirect проблема сама по себе. Исправлено добавлением / в конце URL-адреса. - person Kishor Pawar; 02.08.2017
comment
Я иногда получаю эту ошибку, когда пытаюсь запустить незавершенное развертывание проекта на Heroku. - person akolliy; 22.05.2020
comment
@ david.barkhuizen Я считаю, что то, что вы сказали, полностью справедливо. Но теперь как мне заставить браузер понимать или отправлять файл javascript с сервера? - person tencho; 09.07.2020

Просто к сведению людей, у которых может быть такая же проблема - мне просто нужно было заставить мой сервер отправлять обратно JSON как application / json, и обработчик jQuery по умолчанию работал нормально.

person Edward Abrams    schedule 28.08.2010
comment
Я думаю, что у меня обратная проблема. Я запрашиваю JSON у стороннего API, и они возвращают приложение / javascript в качестве ответа, и я получаю ту же ошибку, о которой вы сообщили в этом вопросе. Не знаю, как с этим бороться. - person wuliwong; 10.05.2012
comment
Странная проблема - он отлично работает на локальном хосте, но не на сервере. Есть идеи, почему? - person VishwaKumar; 15.10.2012
comment
Привет. У меня точная проблема, и я не могу ее решить, может ли кто-нибудь сказать мне, как вы отправляете JSON обратно на сервер - person Alen; 25.10.2013
comment
Спасибо, я отправил приложение / javascript (так как я неправильно прочитал это SO) и получал эту ошибку на простом действительном JSON. Изменение его на application/json устранило ошибку. Я не использую JSONP. - person scipilot; 07.11.2014
comment
Даже я получаю ту же ошибку Uncaught SyntaxError: Unexpected token:, даже после получения ответа в формате json {success: true, data: 2593} - person Rupali Pemare; 16.03.2017

Это только что случилось со мной, и причина была ни в одной из вышеперечисленных причин. Я использовал команду jQuery getJSON и добавлял callback=? для использования JSONP (поскольку мне нужно было перейти на другой домен), а также возвращал код JSON {"foo":"bar"} и получал ошибку.

Это потому, что я должен был включить данные обратного вызова, например jQuery17209314005577471107_1335958194322({"foo":"bar"})

Вот код PHP, который я использовал для этого, который ухудшается, если используется JSON (без обратного вызова):

$ret['foo'] = "bar";
finish();

function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

Надеюсь, это поможет кому-то в будущем.

person Grim...    schedule 02.05.2012
comment
Это мне очень помогло. Мы должны заключать данные json в данные jsoncallback всякий раз, когда мы используем метод jsonp. Также данные jsonpcallback не должны начинаться с цифр. Когда я попробовал с числами, ничего не вышло. Когда я попробовал использовать тот же формат, что и в этом ответе, он сработал ... - person Ganesh Babu; 06.09.2013
comment
Достаточно верно, но ошибка та же, и код будет постепенно ухудшаться и по-прежнему работать, если используется JSON. - person Grim...; 30.12.2015
comment
У меня это сработало с AJAX, jQuery и JSONP. Большое спасибо! - person Piotr Wittchen; 03.03.2017

Я только что решил проблему. Что-то вызывало проблемы со стандартным вызовом Request, поэтому вместо этого я использовал следующий код:

vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});

Если кто-нибудь знает, почему стандартный объект Request доставлял мне проблемы, я хотел бы знать.

person trobrock    schedule 30.06.2010
comment
разница между стандартным запросом и request.json в основном в заголовках, он добавляет this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'}); - иди на цифру - person Dimitar Christoff; 01.07.2010
comment
Странно, что это было причиной проблемы с этим. - person trobrock; 01.07.2010
comment
Какие там двойные $$? - person falsarella; 27.09.2012
comment
@DimitarChristoff - есть ли ответ на фальсареллу про $$? - person bear; 07.03.2013
comment
@bear Селектор двойного доллара определен в MooTools. - person Anthony Faull; 09.07.2013
comment
@melpomene, ты прав. Комментарий удален во избежание путаницы. - person Keven; 24.04.2018

Я подумал, что добавлю свою проблему и решение в список.

Я получал: Uncaught SyntaxError: Unexpected token <, и ошибка указывала на эту строку в моем заявлении об успехе ajax:

var total = $.parseJSON(response);

Позже я обнаружил, что в дополнение к результатам json с ответом отправлялся HTML, потому что у меня была ошибка в моем PHP. Когда вы получаете сообщение об ошибке в PHP, вы можете настроить его так, чтобы он предупреждал вас с помощью огромных оранжевых таблиц, и именно эти таблицы отбрасывали JSON.

Я обнаружил это, просто выполнив console.log(response), чтобы увидеть, что на самом деле отправляется. Если это проблема с данными JSON, просто попробуйте посмотреть, можете ли вы создать console.log или какой-либо другой оператор, который позволит вам увидеть, что отправлено и что получено.

person Keven    schedule 19.12.2013
comment
Я сделал это. Я повторял json где-то в моем php файле и получал php [// json data] в своем ответе, но я не мог его разобрать. Спасибо, что разместили это, чтобы я мог выяснить свою ошибку. - person Nicholas Decker; 01.07.2014
comment
Проблема с ОП совсем другая. В вашем случае вы пытаетесь разобрать HTML как JSON, а в случае (ах) OP он пытается разобрать JSON как JavaScript. - person Michał Perłakowski; 29.12.2015

Когда вы запрашиваете свой файл JSON, сервер возвращает заголовок JavaScript Content-Type (text/javascript) вместо JSON (application/json).

Согласно документам MooTools:

Ответы с типом содержимого javascript будут оцениваться автоматически.

В результате MooTools пытается оценить ваш JSON как JavaScript, и когда вы пытаетесь оценить такой JSON:

{"votes":47,"totalvotes":90}

как JavaScript, синтаксический анализатор рассматривает { и } как область видимости блока, а не как объектную нотацию. Это то же самое, что и оценка следующего «кода»:

"votes":47,"totalvotes":90

Как видите, : там совершенно неожиданный.

Решение - установить правильный заголовок Content-Type для файла JSON. Если вы сохраните его с расширением .json, ваш сервер должен сделать это сам.

person Michał Perłakowski    schedule 29.12.2015

Похоже, ваш ответ как-то оценивается. Это дает ту же ошибку в Chrome:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

Это связано с тем, что фигурные скобки '{...}' интерпретируются javascript как блок кода, а не как литерал объекта, как можно было бы ожидать.

Я бы посмотрел на функцию JSON.decode () и посмотрел, есть ли там eval.

Аналогичная проблема здесь: Eval () = Неожиданный токен: ошибка

person Zectbumo    schedule 13.08.2015

Если ничего не имеет смысла, эта ошибка также может быть вызвана ошибкой PHP, встроенной в html / javascript, например, приведенной ниже.

<br />
<b>Deprecated</b>:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

Ошибка <br /> и т. д. в коде, который PHP вставляет в HTML, вызывает ошибку. Чтобы исправить такую ​​ошибку (подавить предупреждение), использовал этот код в начале

error_reporting(E_ERROR | E_PARSE);

Для просмотра щелкните страницу правой кнопкой мыши, «просмотреть исходный код», а затем изучите полный HTML-код, чтобы обнаружить эту ошибку.

person Hammad Khan    schedule 09.11.2018

Ошибка "Uncaught SyntaxError: Unexpected token" появляется, когда ваши данные возвращают неправильный формат json; в некоторых случаях вы не знаете, что вы ошиблись форматом json.
проверьте это с помощью alert (); функция

onSuccess : function(resp){  
   alert(resp);  
}

полученное вами сообщение должно быть: {"firstName": "John", "lastName": "Doe"}
и затем вы можете использовать приведенный ниже код.

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

без ошибки «Uncaught SyntaxError: Unexpected token»
но если вы ошиблись в формате json
пример:

... {"firstName": "John", "lastName": "Doe"}

or

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

чтобы у вас был неправильный формат json, исправьте его перед JSON.decode или JSON.parse

person Serip88    schedule 17.03.2015
comment
Я рекомендую использовать для отладки console.log() вместо alert(). - person Michał Perłakowski; 29.12.2015

Это случилось и со мной сегодня. Я использовал EF и возвращал Entity в ответ на вызов AJAX. Виртуальные свойства моего объекта вызывали циклическую ошибку зависимости, которая не обнаруживалась на сервере. Проблема была решена путем добавления атрибута [ScriptIgnore] к виртуальным свойствам.

Вместо использования атрибута ScriptIgnore, вероятно, было бы лучше просто вернуть DTO.

person Daryl    schedule 24.03.2016

Это произошло из-за того, что на моем экспресс-сервере настроено правило для маршрутизации любого 404-го сообщения обратно на /# плюс все, что было в исходном запросе. Разрешение угловому маршрутизатору / js обрабатывать запрос. Если нет маршрута js для обработки этого пути, на сервер отправляется запрос к /#/whatever, который является просто запросом для /, всей веб-страницы.

Так, например, если я хотел сделать запрос для /correct/somejsfile.js, но не набрал /wrong/somejsfile.js, запрос будет отправлен на сервер. Это местоположение / файл не существует, поэтому сервер отвечает 302 location: /#/wrong/somejsfile.js. Браузер успешно следует за перенаправлением, и возвращается вся веб-страница. Браузер анализирует страницу как js, и вы получаете

Uncaught SyntaxError: Неожиданный токен ‹

Итак, чтобы найти неправильный путь / запрос, ищите 302 запроса.

Надеюсь, это кому-то поможет.

person Jerinaw    schedule 26.01.2018

У меня была такая же проблема, и оказалось, что Json, возвращенный с сервера, не является действительным Json-P. Если вы не используете вызов как перекрестный вызов, используйте обычный Json.

person jakob    schedule 13.11.2013
comment
OP использует JSON, а не JSONP. - person Michał Perłakowski; 29.12.2015

Моя ошибка заключалась в том, что я забыл одинарные / двойные кавычки вокруг URL-адреса в javascript:

поэтому неправильный код был:

window.location = https://google.com;

и правильный код:

window.location = "https://google.com";
person Saeed Arianmanesh    schedule 11.04.2020

Я получил "SyntaxError: Unexpected token I", когда использовал jQuery.getJSON(), чтобы попытаться десериализовать значение с плавающей запятой Infinity, закодированное как INF, что недопустимо в JSON.

person Mark Cidade    schedule 18.07.2013
comment
Этот вопрос касается неожиданного токена :. - person Michał Perłakowski; 29.12.2015

В моем случае я столкнулся с той же ошибкой при запуске приложения spring mvc из-за неправильного сопоставления в моем контроллере mvc

@RequestMapping(name="/private/updatestatus")

я изменил приведенное выше сопоставление на

 @RequestMapping("/private/updatestatus")

or

 @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
person Shravan Ramamurthy    schedule 26.09.2015

Для меня лампочка загорелась, когда я просмотрел источник на странице в браузере Chrome. У меня была дополнительная скобка в операторе if. Вы сразу увидите красный кружок с крестиком на линии сбоя. Это довольно бесполезное сообщение об ошибке, потому что неперехваченная синтаксическая ошибка: неожиданный токен не ссылается на номер строки, когда он впервые появляется в консоли Chrome.

person JGFMK    schedule 21.06.2017

Я поступил неправильно в этом

   `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

Я уже инициализировал переменную fs, но снова поставил var во вторую строку. Это тоже дает такую ​​ошибку ...

person Janen R    schedule 21.07.2017

Для тех, кто испытывал это в AngularJs 1.4.6 или аналогичном, моя проблема заключалась в том, что angular не находил мой шаблон, потому что файл в templateUrl (путь), который я указал, не может быть найден. Мне просто нужно было указать достижимый путь, и проблема исчезла.

person lwdthe1    schedule 02.02.2018
comment
Я решил ту же проблему, исправив URL-адрес baseref - указал на корневую папку = ›‹ base href = / › - person Abdeali Chandanwala; 15.10.2018

В моем случае это был ошибочный URL (не существующий), поэтому, возможно, ваша «отправка» во второй строке должна быть другой ...

person Michal - wereda-net    schedule 20.12.2018

Эта ошибка также может означать отсутствие colon или : в вашем коде.

person Cons Bulaquena    schedule 06.10.2020

В моем случае установка / в начале src скриптов или href таблиц стилей решила проблему.

person Vahid Kiani    schedule 01.07.2021

Uncaught SyntaxError: неожиданный токен}

Chrome сообщил мне об ошибке для этого примера кода:

<div class="file-square" onclick="window.location = " ?dir=zzz">
    <div class="square-icon"></div>
    <div class="square-text">zzz</div>
</div>

и решил, что исправил onclick, чтобы он был похож на

... onclick="window.location = '?dir=zzz'" ...

Но ошибка не имеет отношения к проблеме ..

person ungalcrys    schedule 24.09.2013
comment
OP спросил о неожиданном токене :. - person Michał Perłakowski; 29.12.2015