发送ajax请求但没有得到正确的结果

时间:2014-05-13 09:17:30

标签: javascript ajax

我正在尝试显示从循环中的数据库中获取的数据以及循环之间我调用该函数并发送ajax请求它不起作用。实际上它只显示我使用的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);
}

请建议我这个问题的原因是什么,只有当我使用警报

时,我的代码才能正常运行

1 个答案:

答案 0 :(得分:0)

使用警报时代码工作的原因是因为无论何时调用警报函数。程序流程暂停。换句话说,在您关闭警报之前,您的循环不会继续进行另一个Ajax调用。因此,请求得到正确处理,响应数据显示在span div中。这就是为什么我提到让你的呼叫同步而不是。

所以回答你在评论中提到的问题,是的,有时太多的Ajax调用可能是个问题。让我们说循环运行超过15-20次,这意味着15-20个同时请求。现在,考虑php脚本处理相同请求的次数?绝对是个问题!

即使使用Jquery Ajax,循环成功完成的可能性实际上也是50-50,因为它可以归结为正在进行的请求数量,正在使用的带宽以及在服务器上处理请求的方式。 / p>

解决此问题的一种可能方法是:不是不断地从循环中的服务器一次又一次地请求小数据,而是进行一次Ajax调用并将整个数据作为json获取。然后,解析json并使用特定的span id将数据附加到跨度,以从json对象中提取相关数据。

您可能需要在上面的javascript和spancount.php中进行一些调整。但它肯定会为您节省大量带宽。你必须考虑到不止一个人可以使用你的网站的事实!!

希望通过您的项目尽可能地清理事物:D