通过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;
}
}
问题是,如果服务器离线,它就不会返回。我如何设置一个超时,这样如果它在一定时间后没有返回,我就可以认为它离线了?
7条答案
按热度按时间j2cgzkjk1#
XMLHttpRequest
不能跨域工作,相反,我会加载一个很小的<img>
,您希望它能很快返回并查看onload
事件:**编辑:**整理我的答案。
XMLHttpRequest
解决方案在同一个域上是可能的,但是如果你只是想测试服务器是否在线,img load解决方案是最简单的。没有必要为超时而烦恼。如果你想让代码看起来像是同步的,这里有一些语法糖给你:iszxjhcz2#
下面是我如何在Node.js应用程序中使用Fetch管理请求并使用AbortController处理超时来检查服务器可用性的。
kxxlusnw3#
添加到gilly3答案
在实践中,我发现需要使用
document.body.appendChild
相当慢。虽然问题是关于纯JavaScript的,但使用一些HTML会使解决方案更快。
所以我把这段代码留给那些追求速度的人。
cyvaqqii4#
使用一个
XMLHttpRequest
,然后检查它是否失败。虽然不确定这是否可以跨域工作。lnxxn5zx5#
调用一个 AJAX ,它的结果会告诉你。
arknldoa6#
最初的答案仍然有效,但已经过时了。下面是我采取的方法:
1zmg4dgp7#
由于
XMLHttpRequest
对我来说不适用于cors
问题,我找到并尝试了gilly3的答案,如果你调用一次,它会工作得很好。当你频繁检查服务器时,它会失败,因为加载的图形文件已经在浏览器该高速缓存中了。所以我添加了一个随机元素作为查询字符串来避免这种情况。(一个解决方案,我也在堆栈溢出的某个地方找到了。)