我有簡單的JavaScript代碼使用Ajax API從服務器獲取XML。帶異步的jQuery Ajax調用返回null響應XML
function loadXML(path, node) {
var response_obj = "";
/* Fire Ajax request and get the XML */
var request_obj = "";
$.ajax({
async: true,
type: "GET",
url: path,
dataType: "xml",
success: function(XMLObj, status, resquestObj) {
response_obj = XMLObj;
request_obj = requestObj;
},
error: function(){
alert("Unable to fire AJAX request");
}
});
alert(response_obj); //<-- This is NULL if async=true
/* More logic to follow which will use response_obj (XML)
and render it in the 'node' argument passed. */
}
其中,所述路徑對應於有效 XML(使用W3C validator測試)和節點指向的HTML頁面,其中響應具有一個DIV元件被解析和所附。
我需要的是,Ajax調用應該返回我將解析並呈現的responseXML
對象。爲此,我將響應XML分配給本地變量(本地函數的作用域),然後使用它(目前我只是將它發送給alert)。現在
,問題是,當我使用該功能async
設置爲false
,該alert
調用成功返回[object XMLDocument]
。但只要我將async
更改爲true
,null
由alert
打印。
我的理解是,當async:true
,最後alert
甚至在Ajax調用返回XML之前被調用。同樣,當async:false
,這是一個序列化的調用,並且當控制到達最後的alert
調用時,XML已經到達。
我應該怎麼做,這樣:
- 我作爲局部變量返回由阿賈克斯 調用,這樣 我可以使用它們的響應對象(和 請求對象)。據我所知, 回調函數,如果傳遞給
success
,將有三個 參數 - 但是,我不知道如何 從該調用返回回 功能到我loadXML
功能。 - 我不必將Ajax調用轉換爲同步,因爲這只是我正在觸發的函數之一 - 還有許多其他的Ajax調用也會被髮出。
- 我是否正確假設
async:false
已在此函數中序列化,而async:true
不是?
感謝您的回覆。實際上,哪個函數獲得XML,還需要HTML'節點' - 所以,我的問題是我該怎麼做,以便回調也有節點。 (如果在問題文本中沒有暗示,我很抱歉)。無論如何,爲了確認我的理解。 – Shrey 2010-07-05 15:34:33