Я пытаюсь изучить 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 (Not Found)», поэтому я знаю, что он загружается (или, по крайней мере, пытается).
источник
var glacier = data;
должно хватить.Uncaught SyntaxError: Unexpected token I
потому что Python кодируетjson.dumps([float('inf'),float('nan')]) == '[Infinity, NaN]'
Ответы:
Похоже, jQuery делает предположение о типе данных. Он выполняет анализ JSON, даже если вы не вызываете getJSON () - тогда, когда вы пытаетесь вызвать JSON.parse () для объекта, вы получаете ошибку.
Дальнейшее объяснение можно найти в ответе Адитьи Миттала .
источник
JSON.parse
объект, «неожиданный токен o» выбрасывается просто потому, что он пытается разобратьobj_to_parse.toString()
, что есть[object Object]
. ПопробуйтеJSON.parse('[object Object]');
;)dataType
(каким-либо образом, почему), он используетContent-type
HTTP-заголовок ответа, чтобы определить, к какому типу данных это относится, и анализирует его, если он распознает jQuery.Проблема очень проста
Вы анализируете это дважды.
get
используетdataType='json'
, поэтому данные уже в формате JSON. Используйте,$.ajax({ dataType: 'json' ...
чтобы специально установить возвращаемый тип данных!источник
В основном, если заголовок ответа - text / html, вам нужно выполнить синтаксический анализ, а если заголовок ответа - application / json, то он уже проанализирован для вас.
Проанализировал данные из обработчика успеха jquery для ответа text / html:
Проанализировал данные из обработчика успеха jquery для ответа приложения / json:
источник
Еще один намек на
Unexpected token
ошибки. Существует два основных различия между объектами javascript и json:Правильный JSON
Ошибка JSON 1
Ошибка JSON 2
замечание
Это не прямой ответ на этот вопрос. Но это ответ за
Unexpected token
ошибки. Так что, возможно, это поможет другим, кто сталкивается с этим вопросом.источник
Просто ответ уже проанализирован, вам не нужно анализировать его снова. если вы проанализируете его снова, он выдаст вам «неожиданный токен», однако вы должны указать тип данных в своем запросе, чтобы иметь тип
dataType='json'
источник
У меня была похожая проблема только сейчас, и моё решение может помочь. Я использую iframe для загрузки и преобразования XML-файла в json и отправки его за кулисы, а Chrome добавляет к входящим данным некоторый мусор, который только периодически появляется и вызывает «Uncaught SyntaxError: Unexpected token o» ошибка.
Я получал доступ к данным iframe следующим образом:
который работал нормально на localhost, но когда я загрузил его на сервер, он перестал работать только с некоторыми файлами и только при загрузке файлов в определенном порядке. Я действительно не знаю, что вызвало это, но это исправило это. Я изменил строку выше
однажды я заметил какой-то мусор в ответе HTML.
Короче говоря, проверьте ваши необработанные данные ответа HTML, и вы можете что-то включить.
источник
Это также происходит, когда вы забыли использовать
await
ключевое слово для метода, который возвращает данные JSON.Например:
выдаст ошибку из-за отсутствия
await
. На самом деле возвращаетсяPromise
[объект], а неstring
.Чтобы исправить, просто добавьте ожидание, как вы должны:
Это должно быть довольно очевидно, но ошибка вызывается
JSON.parse
, поэтому легко пропустить, если есть некоторое расстояние междуawait
вызовом вашего метода иJSON.parse
вызовом.источник
Убедитесь, что в вашем файле JSON нет завершающих символов до или после. Может быть, непечатный? Вы можете попробовать этот способ:
источник
Где tempActivity извлекает данные, что приводит к ошибке «SyntaxError: Неожиданный токен o в JSON в позиции 1 - переполнение стека»
источник