Interval被两个Ajax调用阻止

时间:2012-06-01 13:10:37

标签: javascript ajax intervals

我有一个Interval,它每隔3秒运行一次。

intervalStepper = window.setInterval('intervalTick()','3000');

function intervalTick() {
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            gotResult(xmlhttp.responseText);
        }
    }
    xmlhttp.open('GET','index.php?ajax=true',true);
    xmlhttp.send();
}
function gotResult(res) {
    alert(res);
}

另外,我还有另一个Ajax Call,它在点击按钮时运行。

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
    xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        agentDetailGotten(xmlhttp.responseText);
    }
}
xmlhttp.open('GET','index.php?anotherPage=true',true);
xmlhttp.send();

现在,如果我在间隔结束时执行第二个代码并执行第一个调用,则调用实际上几乎同时运行。但是,似乎间隔以某种方式死亡 - 他不再打勾了。

这是一个已知的问题还是我只是没有看到大事......

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试再次清除并设置间隔:

intervalStepper = window.setInterval('intervalTick()',3000);

function intervalTick() {

    window.clearInterval(intervalStepper);

    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            gotResult(xmlhttp.responseText);
        }
    }
    xmlhttp.open('GET','index.php?ajax=true',true);
    xmlhttp.send();

    intervalStepper = window.setInterval('intervalTick()',3000);

}

function gotResult(res) {
    alert(res);
}

答案 1 :(得分:0)

我刚才解决了。

看起来这就像firefox bug(在bugzilla.mozilla.org上找到)

NS_ERROR_NOT_AVAILABLE

这个没有向我展示,但我现在才发现。当Firefox尝试同时执行两个调用时出现。

有关详细信息,我找到了一个博客条目here

我解决了,如果一个呼叫正在运行,另一个呼叫正在等待。