如何在ajax回调函数之外使用xml响应作为XMLObject

时间:2010-05-01 00:43:58

标签: jquery ajax xml-serialization xmldocument

希望我只是做了一个愚蠢的疏忽,但我无法弄清楚为什么以下不起作用:

$(function() {
var xml;
    $.get(
        "somexml.xml",
        function(data){
            xml = data;
        },
        "xml");
    alert(xml);
});

如果我把警报放在回调函数中,我会回来object XMLdocument但如果我将它放在ajax调用之外,我会得到undefined

由于我的目标是要解析一个新的DOM,所以我不希望XMLdocument的整个处理都在回调函数中。

我已经尝试在整个onready函数之外定义变量,在顶部(如上所述)和回调函数内部,都没有运气。

根据jquery文档中的Specifying the Data Type for Ajax Requests,这应该是可能的。

2 个答案:

答案 0 :(得分:2)

AJAX被定义为异步 JavaScript和XML - 尽管人们也将这个术语用于同步和非XML请求。然而,异步意味着请求将在单独的线程上执行。 xml未定义,因为发生了以下情况:

  

发送请求 - >访问xml var - >收到回复 - > data被分配到xml变量

如您所见,在您尝试访问之前,收到的数据不会分配给xml var。如果您只想要一个单独的块来处理XML数据,为什么不创建一个单独的函数并将其作为参数传递?

$(function() {
    $.get(
        "ews_cal_finditem.xml",
        parseXML,
        "xml");
});
function parseXML(data) {
    // This is the callback function
    alert(data);
}

甚至

$(function() {
    $.get(
        "ews_cal_finditem.xml",
        function(data){
            parseXML(data);
        },
        "xml");
});
function parseXML(xml) {
    alert(xml);
}

答案 1 :(得分:0)

您也可以将ajax调用作为async = false运行,但这应该小心,因为它会阻止进一步执行直到它完成。从AJAX中取出A时必须小心。