【问题标题】:jQuery cache XMLjQuery 缓存 XML
【发布时间】:2009-10-17 15:31:03
【问题描述】:

我正在尝试创建一个作品集网站,我的作品位于 XML 文件中。我想将 XML DOM 存储在一个 JavaScript 变量中,这样我就可以在每次用户单击加载新片段时访问它而无需调用服务器。

现在我有:

$(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(data)”,它会记录一个“文档”。如果我在“$(document).ready...”中的“console.log(xml)”,它会记录一个 XMLHTTPRequest,我无法访问 XML 文档的 DOM。

我尝试过返回“data.responseXML”,但这并没有做任何事情。我还尝试在“成功:”之后调用非匿名函数并在那里记录 XML,它仍然显示为“文档”,这正是我所需要的。

当我返回 XML 时似乎出现了问题——它从“文档”变为“XMLHTTPRequest”。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: javascript jquery xml


    【解决方案1】:

    试试这个:

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

    我不知道 '$.ajax' 返回什么,但我尝试过与您类似的方法,但它永远不会奏效。所以上面的代码是我解决的。

    编辑只是想强调您必须在 ajax 请求中包含“async: false”。

    希望这会有所帮助。

    【讨论】:

    • 太棒了,NawaMan——非常感谢!也许“$.ajax”返回整个 XML 对象,而“success:”只返回 responseXML?你知道为什么 async 需要为 false 吗?
    • 我真的不知道回报:p。 async 需要为false 以便函数getXML() 将首先等待ajax 执行成功。 (首先分配 XML)。 :D
    猜你喜欢
    • 2011-05-22
    • 2012-05-22
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2011-12-18
    • 2011-03-28
    • 2018-10-10
    • 2015-05-27
    相关资源
    最近更新 更多