Javascript 每2秒观察一次响应状态,直到它';完成或失败
我必须在一个网站上进行运行时测量,该网站将一个xhr数据包发布到后端,然后每隔2秒获取一个进度状态。 xhr响应主体具有Javascript 每2秒观察一次响应状态,直到它';完成或失败,javascript,google-chrome,xmlhttprequest,Javascript,Google Chrome,Xmlhttprequest,我必须在一个网站上进行运行时测量,该网站将一个xhr数据包发布到后端,然后每隔2秒获取一个进度状态。 xhr响应主体具有状态字段,例如{status:“IN_PROGRESS”}{status:“IN_PROGRESS”}或{status:“FAILED”},{status:“STARTED”或{status:“COMPLETED”} 我的问题是:我如何编写一个脚本来监视正在初始化进程的状态包的xhr流量,然后监视状态xhr包的流量。如果状态为失败或完成,它应该停止并打印失败或完成。每2秒发送G
状态
字段,例如{status:“IN_PROGRESS”}{status:“IN_PROGRESS”}
或{status:“FAILED”}
,{status:“STARTED”
或{status:“COMPLETED”}
我的问题是:我如何编写一个脚本来监视正在初始化进程的
状态
包的xhr流量,然后监视状态xhr包的流量。如果状态为失败或完成,它应该停止并打印失败或完成。每2秒发送GET
请求,直到de>COMPLETED或FAILED
返回后,您可以将所有XHR对象存储到一个池中。一旦状态为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();
}
}
}
是否只有一个Ajax请求?或者有多个Ajax请求?看起来您需要的是实时技术,如WebSocket、Comet等@shaochuancs开始时只有一个POST请求,然后每隔2秒就会有一个GET请求检查状态,直到完整或失败返回为状态