在下面的代码中,有没有办法在downloadURL()之外输出所需的mlength?多么?
var markers=new Array();
var mlength=0;
downloadUrl("phpsqlajax_genxml.php", function(data) {
var xml = data.responseXML;
markers = xml.documentElement.getElementsByTagName("marker");
mlength = markers.length;
alert(mlength); //output is not 0 (ex. 3)
});
alert(mlength); //outputs 0 发布于 2012-02-25 17:08:20
这是因为根据定义,AJAX是异步的。在执行alert时,AJAX调用还没有返回。您需要将所有使用mlength的代码移到成功回调中。
另一种选择是使AJAX请求同步,但这通常不是您想要的,因为它往往会在收到响应之前锁定浏览器。
发布于 2012-02-25 17:11:41
简单的回答是否定的。我假设downloadUrl是异步的,您无法控制这一点(这意味着警报发生在您提供的回调之前)。
如果你真的需要输出到外部(我强烈建议你这样做)。你可以做到的。
var markers=new Array();
var mlength=0;
var req = new XMLHttpRequest();
req.open("phpsqlajax_genxml.php", false);
req.send();
var xml = req.responseXML;
markers = xml.documentElement.getElementsByTagName("marker");
mlength = markers.length;
alert(mlength); //output is not 0 (ex. 3)不过,这是很脏的代码。
发布于 2012-02-25 17:15:28
如果希望在XHR回调之外使用来自XHR的mlength,则必须等到它具有值为止。您可以使用超时函数来完成此操作:
var markers = []
,mlength = null
,showresult = function() {
if (mlength === null) { //=> no value, wait another 100 ms
setTimeout(showresult,100);
} else { //=> there it is, alert it
alert(mlength);
}
};
downloadUrl("phpsqlajax_genxml.php", function(data) {
var xml = data.responseXML;
markers = xml.documentElement.getElementsByTagName("marker");
mlength = markers.length;
});
setTimeout(showresult,100);https://stackoverflow.com/questions/9442726
复制相似问题