[英]sending ajax request but not getting right result.Js
我试图显示在循环中和循环之间从数据库中获取的数据,我调用该函数并发送ajax请求,该请求不起作用。实际上,它仅在我使用alert命令时显示。 如果我使用了Alert,则浏览器将显示div,然后如果我单击“确定”,则会显示警报,然后它会显示第二个div,然后再次显示警报。 这是js代码
function like(divid,id,session) {
var orgnldiv=document.getElementById(divid);
var ndiv=document.createElement('DIV');
var idd=id+5000;
ndiv.id =idd;
ndiv.className="likeclass";
orgnldiv.appendChild(ndiv);
var dynamicdiv=document.getElementById(idd);
var span=document.createElement('span');
var spanid=idd+5000;
span.id=spanid;
span.className="spanclass";
dynamicdiv.appendChild(span);
var xmllhttp15;
if (window.XMLHttpRequest) {
xmlhttp15=new XMLHttpRequest();
} else {
xmlhttp15=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp15.onreadystatechange = function() {
if (xmlhttp15.readyState==4 && xmlhttp15.status==200) {
document.getElementById(spanid).innerHTML=xmlhttp15.responseText;
}
}
xmlhttp15.open("GET","spancount.php?postid="+id+"&userid="+session);
xmlhttp15.send();
// alert(spanid);
}
请建议我这个问题的原因是什么,只有当我使用警报时,我的代码才能正常工作
使用Alert时代码起作用的原因是因为每当调用alert函数时。 程序流程已暂停。 换句话说,您的循环将不会继续发出另一个Ajax调用,直到您解除警报为止。结果,请求得到了正确处理,并且响应数据显示在span div中。 这就是为什么我提到过要使您的通话同步。
因此,要回答您在评论中提出的问题,是的,有时太多的Ajax调用可能是一个问题。 假设循环运行超过15-20次,这意味着15-20个并发请求。 现在,考虑一下php脚本处理同一请求的次数吗? 绝对是这里的问题!
即使使用Jquery Ajax,循环成功完成的机会实际上也是50-50,因为它全都归结为发出的请求数量,使用的带宽以及如何在服务器上处理请求。
解决此问题的一种可能方法是:而不是不断地从循环中的服务器一次又一次地请求少量数据,而是进行一个Ajax调用并将整个数据作为json获取。 然后,解析json并通过使用特定的span id从json对象提取相关数据,将数据附加到span。
您可能需要对上述javascript和spancount.php进行一些调整。 但这肯定会为您节省大量带宽。 您必须考虑一个事实,即可能有不止一个人使用您的网站!
希望您的项目一切顺利,:D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.