2011-06-23 156 views
0

在我的web应用程序中,我需要检查另一个服务器(在不同的IP地址上)是否启动。我知道我不能使用直接的ajax请求,因为跨域限制。我无法使用JSONP,因为我无法控制其他服务器。我还需要重复检查服务器是否正在运行,因为它可能在某些时候不可用。所有这些都不容易。如何检查另一台服务器是否启动了JavaScript?

但是由于我只关心远程服务器成功的请求(我不关心服务器可能返回的任何数据),我希望这是可能的。

我不能在服务器端做到这一点,因为服务器端可能会或可能不会看到其他服务器,我真正关心的是客户端(网络浏览器)具有可见性。

我可以追加一个新的iframe到src等于远程服务器地址的页面,但是如何检查if(IF)iframe内容是否已成功载入?另外我该如何定期提出要求?通过重复创建新的内置页框?这似乎很不洁净。

有什么办法可以干净而可靠地做到这一点吗?

回答

2
function testServer(server, cb) { 
    var img = new Image(); 
    img.onload = function() { 
     cb.call(this, img); 
    }; 
    img.src = server; 
} 

var url = "http://placekitten.com/200/300/" 
testServer(url, function _self(img) { 
    if (img.naturalHeight === 200) { 
     alert("win");  
    } else { 
     setInterval(function() { 
      testServer(url, _self); 
     }, 10000); 
    } 
}); 

你想从远程服务器加载图像,然后检查图像高度或什么是你希望它是什么。

如果你不能把远程服务器上的图像,那么你将需要使用CORS

+0

+1谢谢,这是一个好主意!我假设如果服务器不在,那么高度将不一样。如果服务器未启动,是否有方法在10秒后重试? –

+0

@AnupamJain添加了'else'的情况。 – Raynos

-1

我知道我不能使用ajax,因为跨域限制。

事实并非如此。见JSONP

+2

一个更简单的方法是尝试和负载来自其他服务器的小图像。 – Raynos

+0

你应该将其作为@Raynos的答案发布,这真是个好主意。 – Blindy

+0

@Raynos我没有说这是完美的,只是纠正误解。 – Raoul

0

类似的解决方案,以Raynos'使用jQuery:

$('<img src="http://domain.tld/path/to/a.png">').load(function(){ 
    console.log("domain.tld is up."); 
}); 
相关问题