我正在开发一个非常类似于在线考试的网站,我想设计一种方式,以便我可以向用户表明他们当前是连接还是与我的服务器断开连接。为此,我不断ping我服务器上的空文件,以了解连接是否可用。代码看起来像这样 -
$(document).ready(function(){
//Defining the function
var req = function () {
$.ajax({
url : 'ping.php',
error: function(){$("#circle").css("background","red");},
complete : function () {
$("#circle").css("background","green");
req();
}
});
};
//Calling the function
req();
//Rest of my code
});
现在我的理解是,只要调用完成,圆圈就会变为绿色,如果发生错误,它将变为红色,并且Ajax调用将停止。我的问题如下:
有没有“更好”的方法呢?例如,Google或Facebook如何标记其在线用户?
这种递归式Ajax Call会以任何方式降低/减慢我的服务器吗?
注意:它实际上不是“我的”服务器。我没有行政权利,因此这是一个主要问题。
请帮帮我。谢谢!
答案 0 :(得分:0)
1)你应该用超时限制你的ping。这将减少服务器的负载。这可以使用setTimeout完成。
2)您应该只将圆圈设置为绿色。完成了成功和错误的激活,因此您将始终在代码中看到绿色。
$(document).ready(function(){
//Defining the function
var req = function () {
$.ajax({
url : 'ping.php',
success : function(){$("#circle").css("background","green");},
error: function(){$("#circle").css("background","red");},
complete : function () {
setTimeout(req, 5000);
}
});
};
//Calling the function
req();
//Rest of my code
});
作为一个额外的琐事,您的代码在技术上不是递归的,因为后续调用发生在事件循环的下一个事件中。也就是说先前调用req实际上是在下一次调用req()之前返回的。如果这是传统的递归调用,您将不会无休止地使用代码将调用放在堆栈上。