【问题标题】:jQuery Ajax call with async returns null responseXML带有异步的 jQuery Ajax 调用返回 null responseXML
【发布时间】:2011-03-11 22:40:54
【问题描述】:

我有简单的 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 元素,其中必须解析和附加响应。 p>

我需要的是 Ajax 调用应该返回我将解析和呈现的 responseXML 对象。为此,我将响应 XML 分配给一个局部变量(此函数范围的局部变量),然后使用它(目前我只是将它发送到警报)。

现在,问题是当我使用此函数并将async 设置为false 时,alert 调用成功返回[object XMLDocument]。但是一旦我将async 更改为true,null 就会被alert 打印出来。

我的理解是,当 async:true 时,最后一个 alert 甚至在 Ajax 调用返回 XML 之前就被调用了。同样,当async:false 时,这是一个序列化调用,当控制到达最后一个alert 调用时,XML 已经到达。

我应该怎么做:

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

【问题讨论】:

    标签: jquery


    【解决方案1】:

    是的,你提到的async:true 是正确的。因此,如果 async 为真,alert() 很自然会失败,如果 async 为假,它会起作用。

    您应该将alert() 放在成功回调中。

    或者你也可以让一个函数说ajaxSuccess并成功调用它Callback()。 将alert() 放入该ajaxSuccess 函数中。

    【讨论】:

    • 感谢您的回复。实际上,哪个函数获取 XML,也需要 HTML '节点' - 所以,我的问题是我应该怎么做才能让回调也有节点。 (如果问题文本中没有暗示这一点,我深表歉意)。无论如何,感谢您确认我的理解。
    猜你喜欢
    • 2014-10-29
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2017-06-29
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多