Преобразование возвращаемых данных 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
});

что, конечно, похоже на то, что у вас есть, поэтому я чувствую, что мне нужно сделать шаг назад и проанализировать проблему.

Другие вопросы по тегам