2011-12-13 91 views
2

我有一個很長的進程託管在Web服務器上。該事件是由網頁觸發的,由用戶點擊按鈕。一些Javascript通過Ajax定期輪詢以檢查操作是否已完成服務器端。要做到這一點,我使用setInterval,後來在clearInterval停止輪詢。取消Javascript超時

如果這需要太長時間(例如服務器崩潰),我想在客戶端通過某種超時的通知。我已經做了一些研究,並找到關於setTimeout。問題是,如果操作在超時之前成功完成,我想取消該操作。

  1. 如何做到這一點?
  2. 你會提出一種不同的方法嗎?

PS:我靶向特別IE7/IE8,但總是開一些JQuery的

回答

0

你想兩個定時器(如你所說)

  1. 重複間隔時間做下調查和
  2. 一次性到期而放棄,如果服務器從來沒有響應

如果輪詢成功後,您要清除輪詢間隔和取消故障定時器。如果到期定時器觸發要清除輪詢間隔

var checkCount = 0; 
function checkComplete() { 
    console.log("test " + checkCount); 
    if (checkCount++ > 10) { 
     console.log("clearing timeout"); 
     window.clearInterval(pollInterval); 
     window.clearTimeout(expireTimer); 
    } 
} 
function cancelPolling(timer) { 
    console.log("clearing poll interval"); 
    window.clearInterval(pollInterval); 
} 
var pollInterval = window.setInterval(checkComplete, 500); 
var expireTimer = window.setTimeout(cancelPolling, 10000); 

您可以用checkCount常數「10」小提琴 - 保持較低的模擬投票成功,提高它更高的發生超時前checkCount是到達,模擬輪詢失敗。