2009-10-17 58 views
2

我正在嘗試創建一個投資組合站點,其中我的組件位於XML文件中。我想將XML DOM存儲在一個JavaScript變量中,這樣我就可以訪問它,而不必每次用戶單擊加載一個新的部件時都對服務器進行調用。jQuery緩存XML

現在我有:

$(document).ready(function() { 
    xml = getXML(); 
}); 

function getXML() { 
    var data = $.ajax({ 
     url: '_lib/xml/portfolio.xml', 
     dataType: 'xml', 
     success: function(data) { return data; } 
    }); 
    return data; 
} 

雖然使用Firebug,如果我「的console.log(數據)」,在之後的匿名函數「的成功:」「文件」,它記錄一個如果我在「$(document).ready ...」中使用「console.log(xml)」,它會記錄一個XMLHTTPRequest,並且我無法訪問XML文檔的DOM。

我試過返回「data.responseXML」,但沒有做任何事情。我也嘗試過在「成功」之後調用一個非匿名函數,並在那裏記錄XML,它仍然以「Document」的形式出現,這正是我所需要的。

似乎問題發生在我返回XML時 - 它從「Document」更改爲「XMLHTTPRequest」。

任何幫助將不勝感激。謝謝!

回答

2

試試這個:

function getXML() { 
    var XML = null; 
    $.ajax({ 
     url:  '_lib/xml/portfolio.xml', 
     dataType: 'xml', 
     async: false, 
     success: function(data) { 
      XML = data; 
     } 
    }); 
    return XML; 
} 

我不知道是什麼「$.ajax」的回報,但我已經試過類似你們的它從來沒有工作。所以上面的代碼就是我解決的問題。

編輯只是想強調,你必須有'async: false'在ajax請求。

希望這會有所幫助。

+0

太棒了,NawaMan - 非常感謝!也許「$ .ajax」返回整個XML對象,「success:」只返回responseXML?你知道爲什麼異步需要是錯誤的嗎? – salmonete 2009-10-17 16:12:53

+0

我真的不知道退貨情況:p。 'async'需要爲'false',以便函數'getXML()'等待ajax執行成功。 (首先分配XML)。 :d – NawaMan 2009-10-17 16:36:28