2014-05-15 17 views
10

我有這個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($阿賈克斯),顯示它有一個名爲responseJSON屬性,但是當我嘗試使用$訪問ajax.responseJSON則返回undefined: enter image description here

+0

是否有一個特定的原因,你需要它,通過什麼提供給'成功'處理程序(這是responseJSON無論如何) –

+0

這將是未定義/空,直到ajax調用(這是異步)是完成。此時,您可以通過成功方法訪問它。 –

+0

如何從成功回調中獲取響應數據? – red888

回答

12

那麼,當然這是不確定的,因爲當你在代碼的最後幾行運行console時,響應還沒有來自服務器。

$.ajax返回承諾,您可以使用它附加done()fail()回調,您可以在其中使用您看到的所有屬性。而且您實際上使用了回調errorsuccess,這就是您可以運行代碼和依賴響應中數據的其他功能的地方。

0

的反應,是「數據」,在成功......這樣你就可以訪問到寫入數據[0],數據[1],成功裏面。

例如:

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

如果你想要這個響應,走出成功的,你可以在外面設置一個變量,並嘗試這個辦法:

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

希望,這種幫助。

+0

是的,但是如何從成功回調中獲得它?我想處理腳本中另一個位置的數據。 – red888

+0

你好,在ajax函數外面設置一個變量,並在成功時將數據值賦值給這個變量,這樣你就可以在另一個位置使用這個數據。 – Ferchi

2

您可以使用這一招獲得響應指出:

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

現在已經晚了,但希望能幫助別人。

-2

對於那些誰不介意,如果它是同步的,就像我是,你可以這樣做:

$('#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函數裏面如果有東西觸發了錯誤。

編輯選項以匹配您的情況。快樂編碼:)

+0

同步解決方案几乎總是錯誤的。 – HumbleWebDev

+0

是的,在這裏大多數使用情況下使用同步解決方案是不好的做法。但+1是唯一提供完整工作示例答案的人。我認爲有時候看看同步示例如何清晰地工作也是有價值的。 – thclark