Php 循环中使用ajax的同步请求

Php 循环中使用ajax的同步请求,php,javascript,ajax,synchronous,Php,Javascript,Ajax,Synchronous,我有一个for循环,其中包含ajax请求。请求正在正常工作。所以我不能及时得到请求的结果。我如何在不使用任何库的情况下解决此问题? 谢谢 var availables=document.getElementsByClassName(“可用”); 对于(var i=0;i); } } } 首先,我建议在执行xmlhttp.open和xmlhttp.send之前先使用xmlhttp.onreadystatechange函数。它可能是发送和返回的,因为它是异步运行的,所以在定义/执行onreadyst

我有一个for循环,其中包含ajax请求。请求正在正常工作。所以我不能及时得到请求的结果。我如何在不使用任何库的情况下解决此问题? 谢谢

var availables=document.getElementsByClassName(“可用”);
对于(var i=0;i);
}
}
}

首先,我建议在执行xmlhttp.open和xmlhttp.send之前先使用xmlhttp.onreadystatechange函数。它可能是发送和返回的,因为它是异步运行的,所以在定义/执行onreadystatechange函数之前就返回了。类似的情况

无论如何,通过将xmlhttp.open中的最后一个参数设置为false,您始终可以同步完成这一切。这将使javascript在xmlhttp.send之后等待,然后再继续,但无论采用哪种方式,在打开和发送之前,您都需要先打开ReadyStateChange

    var availables = document.getElementsByClassName("available");

for(var i=0;i<availables.length;i++){
    var element = availables[i];

    var xmlhttp;
    if(window.XMLHttpRequest)
        xmlhttp = new XMLHttpRequest;
    else
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            var result = xmlhttp.responseText;
            console.log(result);

            element.setAttribute("class" , "result available " + result);
            if(result == "online")
                element.innerHTML = "<a href=\"http://twitter.com/" + element.innerText + "\">" + element.innerText + "</a>";   
        }
    }

    xmlhttp.open("GET", "control.php?user=" + element.innerText, true);
  //xmlhttp.open("GET", "control.php?user=" + element.innerText, false); //If you want to do it synchronously
    xmlhttp.send();
}
var availables=document.getElementsByClassName(“可用”);
对于(var i=0;i);
}
}
open(“GET”、“control.php?user=“+element.innerText,true”);
//xmlhttp.open(“GET”、“control.php?user=“+element.innerText,false);//如果要同步执行此操作
xmlhttp.send();
}

让ajax调用同步地
xmlhttp.open(“GET”,“control.php?user=“+element.innerText,true”)是一种非常糟糕的做法
因为在ajax请求结束之前,您无法与应用程序交互。我认为在您的情况下,最好在前一个请求的
onreadystatechange
回调中发送下一个请求。

那么问题出在哪里?为什么要异步处理响应?
    var availables = document.getElementsByClassName("available");

for(var i=0;i<availables.length;i++){
    var element = availables[i];

    var xmlhttp;
    if(window.XMLHttpRequest)
        xmlhttp = new XMLHttpRequest;
    else
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            var result = xmlhttp.responseText;
            console.log(result);

            element.setAttribute("class" , "result available " + result);
            if(result == "online")
                element.innerHTML = "<a href=\"http://twitter.com/" + element.innerText + "\">" + element.innerText + "</a>";   
        }
    }

    xmlhttp.open("GET", "control.php?user=" + element.innerText, true);
  //xmlhttp.open("GET", "control.php?user=" + element.innerText, false); //If you want to do it synchronously
    xmlhttp.send();
}