Я продолжаю получать " Uncaught SyntaxError: неожиданный токен o"

Я пытаюсь изучить html / css / javascript, поэтому я пишу себе учебный проект.

идея заключалась в том, чтобы иметь некоторый словарь, содержащийся в файле json, который затем будет загружен в таблицу. Мне удалось загрузить файл и распечатать одно из его значений, после чего я начал писать код для загрузки значений в таблицу.

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

ошибка заключается в следующем:

Uncaught SyntaxError: Unexpected token o
(anonymous function)script.js:10
jQuery.Callbacks.firejquery-1.7.js:1064
jQuery.Callbacks.self.fireWithjquery-1.7.js:1182
donejquery-1.7.js:7454
jQuery.ajaxTransport.send.callback

мой код javascript содержится в отдельном файле и просто таков:

function loadPageIntoDiv(){
    document.getElementById("wokabWeeks").style.display = "block";
}

function loadWokab(){
    //also tried getJSON which threw the same error
    jQuery.get('wokab.json', function(data) {
        var glacier = JSON.parse(data);
    });
}

и мой файл JSON просто имеет следующее прямо сейчас:

[
    {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    },

    {
        "english": "glasses",
        "kana": "megane",
        "kanji": "M"
    }
]

теперь ошибка сообщается в строке 11, которая является var glacier = JSON.parse(data); линии.

когда я удаляю файл json, я получаю сообщение об ошибке: "GET http://.../wokab.в JSON 404 (Не Найдено)" поэтому я знаю, что он загружает его (или, по крайней мере, пытается).

7 ответов


похоже, jQuery догадывается о типе данных. Он выполняет синтаксический анализ JSON, даже если вы не вызываете getJSON ()-- затем, когда вы пытаетесь вызвать JSON.parse () на объекте вы получаете ошибку.

дальнейшее объяснение можно найти в ответ Адитьи Миттала.


проблема очень проста

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});

вы анализируете его дважды. get использует dataType='json', поэтому данные уже в формате json. Использовать $.ajax({ dataType: 'json' ... чтобы конкретно установить возвращаемый тип данных!


в основном, если заголовок ответа-text/html, вам нужно проанализировать, и если заголовок ответа-application / json, он уже проанализирован для вас.

проанализированные данные из обработчика успеха jquery для ответа text / html:

var parsed = JSON.parse(data);

проанализированные данные из обработчика успеха jquery для ответа application / json:

var parsed = data;

другие подсказки для Unexpected token ошибки. Существует два основных различия между объектами javascript и json:

  1. данные json должны всегда цитироваться с двойными кавычками.
  2. ключи должны быть заключены в кавычки

правильно JSON

 {
    "english": "bag",
    "kana": "kaban",
    "kanji": "K"
}

ошибка JSON 1

 {
    'english': 'bag',
    'kana': 'kaban',
    'kanji': 'K'
 }

ошибка JSON 2

 {
    english: "bag",
    kana: "kaban",
    kanji: "K"
}

Примечание

Это не прямой ответ за этот вопрос. Но это ответ для Unexpected token ошибки. Таким образом, это может помочь другим, кто наткнется на этот вопрос.


просто ответ уже проанализирован, вам не нужно анализировать его снова. если вы проанализируете его снова, он даст вам "неожиданный токен o", однако вы должны указать тип данных в своем запросе, чтобы иметь тип dataType='json'


у меня только что была аналогичная проблема, и мое решение может помочь. Я использую iframe для загрузки и преобразования xml-файла в json и отправки его обратно за кулисы, а Chrome добавлял некоторый мусор к входящим данным, которые только появлялись периодически и вызывали ошибку "Uncaught SyntaxError: Unexpected token o".

Я обращался к данным iframe следующим образом:

$('#load-file-iframe').contents().text()

, который работал нормально на localhost, но когда я загрузил его на сервер он остановил работая только с некоторыми файлами, и только при загрузке файлов в определенном порядке. Я действительно не знаю, что вызвало это, но это исправило это. Я изменил строку с

$('#load-file-iframe').contents().find('body').text()

однажды я заметил некоторый мусор в ответе HTML.

короче говоря, Проверьте свои необработанные данные ответа HTML, и вы можете что-то сделать.


убедитесь, что в файле JSON нет конечных символов до или после. Может, непечатная? Вы можете попробовать так:

[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]