2009-10-17 76 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