【问题标题】:Multiple ajax requests not working after a while一段时间后多个ajax请求不起作用
【发布时间】:2014-08-28 15:40:18
【问题描述】:

我的页面连续(每秒)从服务器加载实时股票数据,向名为 data.php 的 php 文件发出请求。我还有一个 9 的 Ganns 平方计算器,它使用 ajax 通过文本框的 OnKeyUp 函数将值传递给 PHP 文件 (getdata.php) 并返回一些输出。

问题是—— 随着页面加载,两者都可以完美运行。可以使用实时数据和计算器。但过了一会儿,计算器不工作了。在将值写入文本框时,必须处理请求并且必须通过 ajax 调用返回值,但这不会发生。

实时股票数据代码(每秒刷新一次):

<script>
            function showPort(t)
            {
            var xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function()
              {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                document.getElementById("portfo").innerHTML=xmlhttp.responseText;
                }
              }
            xmlhttp.open("GET","data.php",true);
            xmlhttp.send();
            setTimeout(showPort,t);
            }
          </script>

它使用页面加载运行-

<body onload="JavaScript:showPort(2000);">

运行文本框 onkeyup 事件的甘斯平方计算器代码:

<script>
            function showData(str)
            {
            if (str.length==0)
              {
              document.getElementById("txtData").innerHTML="";
              return;
              }
            var xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function()
              {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                document.getElementById("txtData").innerHTML=xmlhttp.responseText;
                }
              }
            xmlhttp.open("GET","getdata.php?a="+str,false);
            xmlhttp.send();
            }
          </script>

运行文本框的onKeyUp事件-

<input type="text" placeholder="Last traded Price" name="str" onKeyUp="showData(this.value)">

我尝试搜索类似的问题,但没有得到我的答案。因此,将这个问题作为一个新问题发布在这里。

【问题讨论】:

  • 你不能用jQuery吗?我看到你在标签中有这个,但代码中什么都没有! :)
  • 我对 JQuery 不太满意。但是,如果有一种简单的方法可以使用 JQuery 来完成,那么我已经准备好使用它了。 :)
  • @ChandanJah 是的,伙计。会更容易!
  • 那帮我和那个哥们。我会尝试这样做。 :)

标签: javascript php jquery ajax


【解决方案1】:

第一个脚本:

function showPort(t)
{
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("portfo").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","data.php",true);
    xmlhttp.send();
    setTimeout(showPort,t);
}

可以这样转换:

$(document).ready(function(){
    setInterval(function(){
        $.get("data.php", function(data){
            $("#portfo").html(data);
        });
    }, 2000);
});

还有下一个:

function showData(str)
{
    if (str.length==0)
    {
        document.getElementById("txtData").innerHTML="";
        return;
    }
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("txtData").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","getdata.php?a="+str,false);
    xmlhttp.send();
}

可以改写为:

function showData(str)
{
    if (str.length==0)
    {
        $("#txtData").html("");
        return;
    }
    $.get("getdata.php?a="+str, function(data){
        $("#txtData").html(data);
    });
}

能否请您尝试执行上述代码,看看它是否有效?不要忘记以这种方式包含 jQuery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">

【讨论】:

  • 所以我不需要在页面加载时调用该函数,ri8??
  • 所以,我尝试了你给出的代码。第二个工作完美,但第一组代码似乎不起作用。它不输出任何东西。该区域留空。我会再次交叉我的代码并很快回到这里。
  • @ChandanJha 当然...等待.. :)
  • 第一组代码似乎不起作用。不返回任何数据。
  • 所以,让它工作。你犯了一个非常小的错误哥们! setInterval(code,delay)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多