2017-06-27 13 views
0

Webサイトでランタイム測定を実行する必要があります。その結果、バックエンドにxhrパケットが送信され、2秒ごとにステータスが取得されます。 xhr応答本文は、{status: "IN_PROGRESS"} {status:"IN_PROGRESS"}または{status:"FAILED"},{status:"STARTED"または{status:"COMPLETED"}などのフィールドがstatusです。完了または失敗するまで2秒ごとに応答ステータスを確認します

私の質問は、プロセスを初期化しているstatusパッケージのxhrトラフィックを監視し、ステータスxhrパッケージのトラフィックを監視するスクリプトを作成するにはどうすればよいですか。ステータスが失敗または完了した場合は、停止して印刷を失敗または完了します。

+0

は1つのAjaxリクエストはありますか?または、複数のAjaxリクエストがありますか? – shaochuancs

+0

WebSocket、Cometなどのリアルタイムテクノロジが必要なように見えます。 – shaochuancs

+0

@shaochuancs冒頭にPOST要求が1回あり、2秒ごとにGET要求があり、完了または失敗が戻ってくるまで状態を確認していますステータスとして – dave

答えて

1

GETリクエストをCOMPLETEDまたはFAILEDに戻すまで2秒ごとに送信するには、すべてのXHRオブジェクトを1つのプールに保存します。ステータスがCOMPLETEDまたはFAILEDになると、2秒ごとのタイマーを停止し、プール内のすべてのXHRオブジェクトを中止します。ここで

はjQueryのを使用した例です。

$.ajax({ 
    type: "POST", 
    url: "/test", 
    data: "test data" 
}); 

var xhrPool = []; 
var timer = setInterval(function() { 
    var xhr = $.ajax({ 
    type: "GET", 
    url: "/test-result", 
    success: function(data) { 
     console.log(data); 
     if (data.status === 'COMPLETED' || data.status === 'FAILED') { 
     handleResponse(data); 
     } 
    } 
    }); 
    xhrPool.push(xhr); 
}, 2000); 

function handleResponse(data) { 
    clearInterval(timer); 
    for (var i in xhrPool) { 
    if (xhrPool[i].readyState !== 4) { 
     xhrPool[i].abort(); 
    } 
    } 
} 
関連する問題