通过 JavaScript 检查我的服务器是否在线的最快方法是什么?
我尝试了以下 AJAX:
function isonline() {
var uri = 'MYURL'
var xhr = new XMLHttpRequest();
xhr.open("GET",uri,false);
xhr.send(null);
if(xhr.status == 200) {
//is online
return xhr.responseText;
}
else {
//is offline
return null;
}
}
问题是,如果服务器离线,它永远不会返回。我如何设置超时,以便如果它在一定时间后没有返回,我可以假设它处于离线状态?
最佳答案
XMLHttpRequest
跨域不起作用。相反,我会加载一个很小的 <img>
您希望很快回来观看 onload
事件:
function checkServerStatus()
{
setServerStatus("unknown");
var img = document.body.appendChild(document.createElement("img"));
img.onload = function()
{
setServerStatus("online");
};
img.onerror = function()
{
setServerStatus("offline");
};
img.src = "http://myserver.com/ping.gif";
}
编辑:清理我的答案。一个XMLHttpRequest
解决方案在同一个域上是可能的,但如果您只想测试服务器是否在线,img 加载解决方案是最简单的。没有必要搞乱超时。如果你想让代码看起来像是同步的,这里有一些语法糖给你:
function ifServerOnline(ifOnline, ifOffline)
{
var img = document.body.appendChild(document.createElement("img"));
img.onload = function()
{
ifOnline && ifOnline.constructor == Function && ifOnline();
};
img.onerror = function()
{
ifOffline && ifOffline.constructor == Function && ifOffline();
};
img.src = "http://myserver.com/ping.gif";
}
ifServerOnline(function()
{
// server online code here
},
function ()
{
// server offline code here
});
关于Javascript:检查服务器是否在线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5224197/