2012-12-24 70 views
0

[注意這一點很重要。我做了我的研究的手之前,我看到了類似的問題被問過,但還沒有什麼是適合我的需要]的JavaScript/AJAX:如果XMLHttpRequest的()x秒後失敗,繼續

我正在使用以下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秒才能意識到沒有互聯網連接 - 這是一個內部網絡,只需要半秒鐘的時間來確認是否存在或不存在網絡連接。

任何幫助將不勝感激。

+0

可以設置[超時屬性(http://www.w3.org/TR/XMLHttpRequest/#the-timeout-attribute),然後設置爲[超時事件]的處理程序(HTTP ://www.w3.org/TR/XMLHttpRequest/#event-xhr-timeout)。 – Barmar

回答

0

你可以在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); 
+0

我試過了,但它不起作用。 :/ – Homie

相關問題