Php AJAX变量范围

Php AJAX变量范围,php,javascript,ajax,Php,Javascript,Ajax,有没有办法在下面的代码中输出所需的最大长度外部下载URL?怎么做 var markers=new Array(); var mlength=0; downloadUrl("phpsqlajax_genxml.php", function(data) { var xml = data.responseXML; markers = xml.documentElement.getElementsByTagName("marker"); mlength = markers.len

有没有办法在下面的代码中输出所需的最大长度外部下载URL?怎么做

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 

这是因为根据定义,AJAX是异步的。在执行警报时,AJAX调用尚未返回。您需要将使用MLENGHT的任何代码移动到成功回调内部


另一个选项是使AJAX请求同步,但这通常不是您想要的,因为它会在收到响应之前锁定浏览器

这是因为根据定义,AJAX是异步的。在执行警报时,AJAX调用尚未返回。您需要将使用MLENGHT的任何代码移动到成功回调内部


另一个选项是使AJAX请求同步,但这通常不是您想要的,因为它会在收到响应之前锁定浏览器

简单的答案是否定的。我假设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)

但这是一段肮脏的代码。

简单的答案是否定的。我假设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)
但这是脏代码。

如果要在XHR回调之外使用XHR中的MLENGHT,则必须等待它具有值。您可以使用超时功能执行此操作:

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);
如果要在XHR回调之外使用XHR中的MLENGHT,则必须等待它具有值。您可以使用超时功能执行此操作:

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);

+感谢你解释了我给他写的不应该接受的选项谢谢你的解释。。。现在我understand@JedLlenado-没问题,很高兴我能帮上忙:+1解释我编码的选项,他不应该接受谢谢你的解释。。。现在我understand@JedLlenado-没问题,很高兴我能帮忙: