2017-06-27 45 views
0

我必須在網站上進行運行時間測量,將xhr數據包發送到後端,然後每2秒獲取一次有關進度的狀態。 xhr響應主體有status字段,如{status: "IN_PROGRESS"} {status:"IN_PROGRESS"}{status:"FAILED"},{status:"STARTED"{status:"COMPLETED"}每2秒鐘觀察一次響應狀態,直到完成或失敗

我的問題是:如何編寫一個正在監視正在初始化進程的status程序包的xhr流量的腳本,然後觀察xhr包的狀態。如果狀態失敗或完成,應停止並打印失敗或完成。

+0

是否只有1個Ajax請求?或者有多個Ajax請求? – shaochuancs

+0

看起來像你需要的是實時技術,如WebSocket,Comet等 – shaochuancs

+0

@shaochuancs它是一開始就有一個POST請求,然後每隔2秒就有一個GET請求來檢查狀態,直到完成或失敗返回作爲狀態 – dave

回答

1

要發送GET要求每2秒,直到COMPLETEDFAILED回來,你都可以XHR對象存儲到一個池。一旦狀態爲COMPLETEDFAILED,請停止每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(); 
    } 
    } 
}