我有一个要求,我需要通过js中的ajax轮询数据库以检查状态。如果状态为“活动”,则应停止轮询并弹出警报“案例现在处于活动状态”。 js应该每2秒检查一次db,直到db status返回“active”。你能为此提供一个优雅的js例程吗?这里有一些通用的js来展示我想要做的事情:
function ReportAsActivePoll()
{
for(var i=0; i<10; i++)
{
setTimeout(StatusIsActive,(i*2000));
if(statusIsActive)
{
ReportAsActive();
break;
}
}
}
var statusIsActive = false;
function StatusIsActive(case)
{
statusIsActive = GetStatusFromDB(case) == "active";
}
function ReportAsActive()
{
alert("case is now active")
}
一些注意事项:
答案 0 :(得分:0)
为简单起见,请使用setInterval()
和clearInterval()
。像这样:
<script type="text/javascript">
function checkStatus(theCase) {
var intervalId = window.setInterval(function() {
if (getStatusFromDb(theCase) == 'active') {
clearInterval(intervalId)
reportAsActive()
}
}, 2000)
}
function reportAsActive()
{
alert("case is now active")
}
var tmpCounter = 0
function getStatusFromDb(theCase)
{
if (tmpCounter++ == 4) return "active"
}
checkStatus('case 123')
</script>
您还应该考虑使用小写字母开头,因为这是正常的JS约定。通过选择其他样式,您可能会遇到区分大小写的错误,这些错误很难追踪。
答案 1 :(得分:0)
您需要使用setInterval而不是setTimeout,当您收到有效回复时,您必须使用clearInterval删除此时间间隔。
所以你需要做这样的事情
var intervalID = window.setInterval(function(){
var resFromYourDB = ...; // get your result via ajax
if (resFromYourDB['active']){
window.clearInterval(intervalID);
// do you alert
}
}, 2000)
通过这种方式,它将轮询您的服务器,直到它将active
作为响应,而不是像setTimeout那样预定义的时间量。此外,当它得到这个回应时,它会完全停止。