在同一页面上使用setinterval调用两个ajax

时间:2016-02-18 20:07:17

标签: javascript ajax

我一直在尝试创建一个人们分享内容的网站,我目前正在尝试显示用户是否在线。这需要一个ajax请求,但我已经有一个计时器和一个每5秒运行一次的ajax请求。我该怎么做才能使两者同时运行。 这是我的代码:

setInterval(function() {checkiframe(); },5000);
function checkonline(){
  var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
           alert("true");
        }
    };
    xhttp.open("GET", "dbcheckpost.php?u=true", true);
    xhttp.send();
}
function checkiframe(){
  var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
           if(xmlhttp.responseText === "true"){
            location.reload();
           }
        }
    };
    xmlhttp.open("GET", "dbcheckpost.php?last=<?php echo $last; ?>", true);
    xmlhttp.send();
    checkonline();
}

我也试过运行两个间隔,但只有一个工作。

编辑:我忘了提到我希望他们以不同的间隔工作。一个是5秒,而另一个是10分钟

1 个答案:

答案 0 :(得分:2)

只需在setTimeout匿名函数

中添加两个函数
setInterval(function() {
     checkiframe();
     checkonline();
},5000);

从“checkiframe”中删除“checkonline”。 如果你想在checkiframe之后执行checkOnline,那么它应该放在回调中

function checkiframe(){
  var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        checkonline();
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
           if(xmlhttp.responseText === "true"){
            location.reload();
           }
        }
    };
    xmlhttp.open("GET", "dbcheckpost.php?last=<?php echo $last; ?>", true);
    xmlhttp.send();
}

如果您希望独立执行您的函数,请使用以分隔setInterval。 这是我测试过的示例代码。

function f1(){
    console.log('1s');
}
setInterval(f1, 1000);
function f2(){
    console.log('5s');
}
setInterval(f2, 5000);