JavaScript/Ajax:如果 XMLHttpRequest() 在 x 秒后失败,则继续

Posted

技术标签:

【中文标题】JavaScript/Ajax:如果 XMLHttpRequest() 在 x 秒后失败,则继续【英文标题】:JavaScript/Ajax: If XMLHttpRequest() fails after x seconds, proceed 【发布时间】:2012-12-24 14:58:07 【问题描述】:

[重要的是要注意:我事先做了研究,看到有人问过类似的问题,但没有什么适合我的需要。]

我使用以下 javascript/Ajax 代码每 120 秒刷新一次 iframe (tracker)。如果由于某种原因刷新失败(例如没有互联网连接),它会将页面重定向到Tracker2.html

<script type=text/javascript>
setInterval(function()
var rq = new XMLHttpRequest();
rq.open('GET', document.getElementById('tracker').src, true);
rq.onreadystatechange = function() 
    if(rq.readyState === 4) 
        if(rq.status === 200) 
         else 
    window.location.href = "Tracker2.html";
        
    
; 
rq.send(null);
    document.getElementById("tracker").src+="";
,120000);
</script>

我的问题是,使用XMLHttpRequest,大约需要 45-60 秒才能“确认”没有互联网连接(= 刷新 iframe 失败),然后才会重定向到 Tracker2.html

理想情况下,我希望只等待 5 秒,如果 5 秒后,如果跟踪器的 iframe 没有响应,则重定向。

基本上,我不需要它等待 45-60 秒来意识到没有互联网连接 - 这是一个内部网络,只需半秒即可确认是否有网络连接。

任何帮助将不胜感激。

【问题讨论】:

可以设置timeout attribute,然后为timeout event设置handler。 【参考方案1】:

您可以在我编辑您的代码的 setInterval 中添加一个 setTimeout。

setInterval(function()
var rq = new XMLHttpRequest();
rq.open('GET', document.getElementById('tracker').src, true);
rq.onreadystatechange = function() 
    if(rq.readyState === 4) 
        if(rq.status === 200) 
            clearTimeout(cancel);
         else 
            window.location.href = "Tracker2.html";
        
    
; 
rq.send(null);
var cancel = setTimeout(function()
    window.location.href = "Tracker2.html";
, 5000);

    document.getElementById("tracker").src+="";
,120000);

【讨论】:

以上是关于JavaScript/Ajax:如果 XMLHttpRequest() 在 x 秒后失败,则继续的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 JavaScript/AJAX 在客户端创建文件? [复制]

Javascript,ajax和内存使用情况

Javascript/AJAX POST 多部分/表单数据

Javascript ajax 仅在需要时刷新

JavaScript, Ajax - 为啥 JavaScript 代码上的 Ajax 函数不能正常运行?

JavaScript-Runoob-AJAX:AJAX 教程