Я пытаюсь изучить некоторые 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)", поэтому я знаю, что загружаю его (или, по крайней мере, пытаться).
Похоже, что jQuery угадывает тип данных. Он обрабатывает JSON, даже если вы не вызываете getJSON() - тогда, когда вы пытаетесь вызвать JSON.parse() для объекта, вы получаете ошибку.
Дальнейшее объяснение можно найти в Ответ Aditya Mittal.
Проблема очень проста
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 для ответа приложения /json:
var parsed = data;
Другие подсказки для ошибок Unexpected token
.
Существуют два основных различия между объектами javascript и json:
Исправить 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: Неожиданный токен o", ошибка.
Я обращался к данным iframe следующим образом:
$('#load-file-iframe').contents().text()
который отлично работал на локальном хосте, но когда я загрузил его на сервер, он переставал работать только с некоторыми файлами и только при загрузке файлов в определенном порядке. Я действительно не знаю, что вызвало это, но это зафиксировало это. Я изменил строку выше на
$('#load-file-iframe').contents().find('body').text()
как только я заметил некоторый мусор в ответе HTML.
Длинная история коротко проверит ваши необработанные данные ответа HTML, и вы можете что-то сделать.
Убедитесь, что ваш JSON файл не имеет никаких завершающих символов до или после. Может быть, непечатный? Вы можете попробовать таким образом:
[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]
var glacier = data;
должно хватить.