我编写了以下代码,每2秒向我的服务器上的心跳端点发出XHR请求。根据成功或失败,我继续执行或使用Jquery UI块插件阻止UI。
var uiBlocked = false;
window.setInterval(function() {
$.ajax({
cache: false,
type: 'HEAD',
url: '/heartbeat/',
timeout: 1000,
success: function(data, textStatus, XMLHttpRequest) {
if (uiBlocked == true && navigator.onLine) {
uiBlocked = false;
$.unblockUI();
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (uiBlocked == false){
uiBlocked = true;
$.blockUI({
message: "Lost connectivity, please reconnect your VPN.",
css: {
border: 'none',
padding: '15px',
backgroundColor: '#000',
'-webkit-border-radius': '10px',
'-moz-border-radius': '10px',
opacity: .5,
color: '#fff'
} });
}
}
})
}, 2000);
现在我的整个UI都缓存在客户端,接下来的调用是更改页面部分的ajax calla。问题是这些调用中的一些阻塞超过2秒,此时页面块和用户会收到连接警报。
如何有效避免这种假阳性?我无法增加超时值,因为如果我确实将超时设置为10秒,如果最终用户在第9秒进行阻塞调用会阻塞3秒,那么我将再次出现误报。
这种情况有解决方法吗?