Преобразование возвращаемых данных AJAX в JSON
Я пытаюсь получить данные в объекте JSON (который я проверял, правильно отформатирован) и вывести данные в консоль Firebug. Я проверил JSON с помощью JSONLint (http://jsonlint.com/) и знаю, что данные не возвращаются в объекте JSON, потому что когда я его регистрирую, он регистрируется как текст, а не как объект. Когда я смотрю на пост ajax, там есть вкладка JSON, на которой показан объект, я просто не могу получить его по какой-то причине.
Мой вызов ajax
$.ajax({
url:'/coords/base',
data: { type: obj.type, id: obj.id },
dataType:'text',
type:'get',
async:false,
success: function(data) {
console.log(data);
}
});
Мои возвращаемые данные выглядят так:
{
"1": {"name":"TEXT","coords":[
{ "entry":3,"x":15,"y":15 }
]}}
Когда я устанавливаю вызов AJAX для переменной и добавляю.responseText; до конца вызова я могу получить ответ AJAX в виде открытого текста. Тогда я подумал, что смогу просто использовать $.serialize() или $.parseJSON(), но затем получаю ошибку "uncaught исключения: синтаксическая ошибка, нераспознанное выражение".
Конечной целью было бы извлечь содержимое из этого responseText и использовать объект JSON во всех моих файлах. Этот вызов должен выполняться синхронно, поскольку он загружает важные данные.
Любая помощь будет принята с благодарностью.
2 ответа
Явно проинструктируйте jQuery обрабатывать ответ как текст:
$.ajax({
// ...
dataType: "text",
// ...
});
После этого вы сможете получить строку JSON. Однако, если после этого вы планируете преобразовать его в значение JS, позвольте мне остановить вас: jQuery может сделать это автоматически. Если вы укажете dataType
в "json"
или просто позвольте jQuery сделать умное предположение, data
аргумент передан success:
функция будет разобранным объектом JSON.
Почему бы не использовать $.getJson()
который эквивалентен
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
что вы должны быть в состоянии сделать следующее:
$.getJSON('file.json', function(data) {
$.each(data, function(i) {
console.log(data[i]);
});
});
редактировать
возможно, я неправильно понимаю проблему.
РЕДАКТИРОВАТЬ #2 Возможно, этот вопрос поможет: есть ли версия $getJSON, которая не использует обратный вызов?
который предлагает использовать это:
$.ajax({
type: 'GET',
url: 'whatever',
dataType: 'json',
success: function(data) { console.log(data);},
data: {},
async: false
});
что, конечно, похоже на то, что у вас есть, поэтому я чувствую, что мне нужно сделать шаг назад и проанализировать проблему.