2011-12-13 11 views
2

Webサーバーでホストされている長いプロセスがあります。このことは、ユーザーがボタンをクリックすると、Webページからトリガーされます。一部のJavascriptでは、Ajax経由で定期的にポーリングを行い、操作がサーバー側で完了したかどうかを確認します。これを行うには、setIntervalを使用し、後でclearIntervalを使用してポーリングを停止します。Javascriptタイムアウトをキャンセルします。

時間がかかる場合(サーバーがクラッシュしたなど)、クライアントに何らかの種類のタイムアウトが通知されます。私はいくつかの調査をして、約setTimeoutを見つけました。問題は、操作がタイムアウト前に正常に終了した場合、私はこれをキャンセルしたいと思います。

  1. これを行う方法?
  2. 別の方法をお勧めしますか?

PS:私は特にIE7/IE8をターゲットが、一部のに常に開いていjQueryの

答えて

7

限り、あなたは変数であなたの間隔のIDを保存するように、あなたはクリアするためにそれを使用することができますその間隔はいつでも可能です。

var interval = window.setInterval(yourFunction, 10000); 

...elsewhere... 

window.clearTimeout(interval); 

詳細については、Mozilla Documentation's setInterval exampleを参照してください。

modified version of Mozilla's Exampleを含むクイックJSフィドルをまとめてください。

0

あなたは(あなたが言ったように)2つのタイマ

  1. がいる場合、サーバーが

を応答したことがない場合はあきらめて次のポーリングと

  • ワンタイムの有効期限を行うために間隔を繰り返したいですポーリング間隔の両方をクリアし、失敗タイマーを取り消したい場合は、ポーリングは成功です。期限タイマーを使用すると、ポーリング間隔

    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がある前にタイムアウトが発生するために上げるために低それを保ちますポーリング失敗をシミュレートしました。

  • 関連する問題