【问题标题】:sending ajax request but not getting right result.Js发送ajax请求但没有得到正确的result.Js
【发布时间】:2014-05-13 18:18:18
【问题描述】:

我试图在循环中显示从数据库中获取的数据,并且在循环之间我调用函数并发送 ajax 请求它不起作用。实际上它仅在我使用警报命令时才显示。如果我使用了警报,那么浏览器会显示 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);
}

请告诉我这个问题的原因是什么,我的代码只有在我使用警报时才能正常工作

【问题讨论】:

  • 更好的选择是使用 jquery ajax。你的代码看起来不错。也许问题在于您提出了太多请求。您可以在此代码中尝试的另一件事是使请求同步,即
  • xmlhttp15.open("GET","URL","TRUE");
  • @AmanGupta 可以对许多请求提出问题吗?
  • 在某种程度上是的。问题是 Ajax 的概念是为了在页面上进行更新,而刷新整个页面实际上是一种浪费!对此发表解释:)

标签: javascript ajax


【解决方案1】:

您的代码在使用 alert 时有效的原因是每当调用 alert 函数时。程序流程暂停。换句话说,在您关闭警报之前,您的循环不会继续进行另一个 Ajax 调用。因此,请求得到正确处理,并且响应数据出现在 span div 中。这就是为什么我提到要让你的调用同步。

所以要回答您在评论中提出的问题,是的,有时太多的 Ajax 调用可能会成为问题。假设循环运行超过 15-20 次,这意味着 15-20 个同时请求。现在,想想 php 脚本处理相同请求的次数?这里肯定有问题!

即使使用 Jquery Ajax,循环成功完成的机会实际上也是 50-50,因为这一切都归结为发出的请求数量、使用的带宽以及服务器如何处理请求。

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

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

希望一切顺利,您的项目一切顺利:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2021-03-20
    • 2012-03-13
    • 2015-09-23
    • 1970-01-01
    • 2020-08-03
    • 2012-12-24
    • 2020-10-19
    相关资源
    最近更新 更多