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
});