Php 循环中使用ajax的同步请求
我有一个for循环,其中包含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
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();
}