AJAX可变范围

Jed*_*Jed 1 javascript php ajax

有没有办法在下面的代码中输出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 
Run Code Online (Sandbox Code Playgroud)

Jam*_*ice 7

这是因为根据定义,AJAX是异步的.由当时的alert执行,AJAX调用尚未返回.您需要将任何正在使用的代码移动mlength到成功回调中.

另一种选择是使AJAX请求同步,但这通常不是你想要的,因为它往往会锁定浏览器,直到收到响应.