繁体   English   中英

发送ajax请求,但未得到正确的结果。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM