使用async的jQuery Ajax调用返回null responseXML

时间:2010-07-05 14:15:30

标签: jquery

我有简单的JavaScript代码,它使用Ajax API从服务器获取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分配给本地变量(本函数的本地范围),然后使用它(目前我只是将其发送到警报)。

现在,问题在于当我将async设置为false时使用此功能时,alert调用成功返回[object XMLDocument]。但是,只要我将async更改为true,就会null打印alert

我理解的是,当async:true时,即使在Ajax调用返回XML之前,也会调用最后一个alert。类似地,当async:false时,这是一个序列化调用,当控制到达最后一次alert调用时,XML已经到达。

我应该怎么做:

  1. 我有响应对象(和 请求对象)由Ajax返回 调用局部变量以便 我可以用它们。我明白那个 回调函数,如果传递给 success,会有三个 参数 - 但是,我不知道如何 从那个电话回来 函数进入我的loadXML函数。
  2. 我不必将Ajax调用转换为同步,因为这只是我要触发的函数之一 - 还有许多其他Ajax调用也要发布。
  3. 我是否认为async:false已在此函数中序列化,而async:true不是?

1 个答案:

答案 0 :(得分:1)

是的,你提到的关于async:true的内容是正确的。因此,如果异步为真,alert()将失败,如果异步为假,它将会失效,这很自然。

您应该将alert()置于成功回调中。

或者您也可以创建一个函数ajaxSuccess并成功调用Callback()。 将alert()放在ajaxSuccess函数中。