Как получить свойство responseJSON объекта jquery $.ajax

У меня есть этот javascript:

$ajax = $.ajax({
    type: 'GET',
    url: 'DBConnect.php',
    data: '',
    dataType: 'json', 
    success: function(data) {},
    error:function (xhr, ajaxOptions, thrownError) {
        dir(thrownError);
        dir(xhr);
        dir(ajaxOptions);
    }
});
console.dir($ajax);
console.dir($ajax.responseJSON);

console.dir($ ajax) показывает, что у него есть свойство с именем responseJSON, но когда я пытаюсь получить к нему доступ с $ajax.responseJSON, он возвращает undefined: enter image description here

Ответ 1

Ну, конечно, это undefined, потому что в тот момент, когда вы запускаете console в последних строках вашего кода, ответ еще не пришел с сервера.

$.ajax возвращает обещание, которое вы можете использовать для присоединения done() и fail() обратных вызовов, где вы можете использовать все свойства, которые вы видите. И вы на самом деле использовали обратный вызов error и success, и там, где вы можете запускать код и другие функции, которые полагаются на данные в ответе.

Ответ 2

Вы можете использовать этот трюк, чтобы получить ответ:

jQuery.when(
    jQuery.getJSON('DBConnect.php')
).done( function(json) {
    console.log(json);
});

Поздно, но надеюсь, это поможет другим.

Ответ 3

Ответ, это "данные", в успехе... поэтому вы можете получить доступ к этим данным записи [0], данным [1], в пределах успеха.

Например:

success: function(data) {
 alert(data[0]);
},

Если вам нужен этот ответ, из-за успеха вы можете установить переменную снаружи и попробовать следующее:

success: function(data) {
 myVar = data;
},

Надеюсь, эта помощь.

Ответ 4

Для тех, кто на самом деле не возражает, если он синхронно, как и я, вы можете сделать это:

$('#submit').click(function (event) {
    event.preventDefault();

    var data = $.ajax({
        type: 'POST,
        url: '/form',
        async: false,
        dataType: "json",
        data: $(form).serialize(),
        success: function (data) {
            return data;
        },
        error: function (xhr, type, exception) {
            // Do your thing
        }
    });

    if(data.success == 200)
    {
        $('#container').html(data.responseJSON.the_key_you_want);
    }
});

Он проходит через движения, ждет ответа от вызова Ajax, а затем обрабатывает его после состояния == 200 и внутри функции error, если что-то вызвало ошибку.

Измените параметры, соответствующие вашей ситуации. Счастливое кодирование:)