检查我的服务器是否通过
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
- });