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

我有简单的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(使用W3Cvalidation器测试),并且节点指向HTML页面上的DIV元素,其中必须解析和附加响应。

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

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

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

我应该怎么做:

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

是的,您提到的有关async:true是正确的。 因此,如果async为true,则alert()自然会失败,如果async为false,它将会起作用。

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

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