【发布时间】: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 已经到达。
我应该怎么做:
- 我有响应对象(和
请求对象)由 Ajax 返回
调用局部变量,以便
我可以使用它们。我明白那个
回调函数,如果传递给
success,会有三个 参数 - 但是,我不知道如何 从那个回调返回 函数到我的loadXML函数中。 - 我不必将 Ajax 调用转换为同步,因为这只是我正在触发的功能之一 - 还有许多其他 Ajax 调用也将被发出。
- 我的假设是否正确,即
async:false在此函数中被序列化,而async:true不是?
【问题讨论】:
标签: jquery