我有简单的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已经到达。
我应该怎么做:
success
,会有三个
参数 - 但是,我不知道如何
从那个电话回来
函数进入我的loadXML
函数。async:false
已在此函数中序列化,而async:true
不是?答案 0 :(得分:1)
是的,你提到的关于async:true
的内容是正确的。因此,如果异步为真,alert()
将失败,如果异步为假,它将会失效,这很自然。
您应该将alert()
置于成功回调中。
或者您也可以创建一个函数ajaxSuccess
并成功调用Callback()
。
将alert()
放在ajaxSuccess
函数中。