如何检查另一台服务器是否在javascript中?

时间:2011-06-23 14:08:49

标签: javascript html ajax cross-domain

在我的webapp中,我需要检查另一台服务器(在不同的IP地址上)是否已启动。我知道由于跨域限制,我无法使用直接的ajax请求。我无法使用JSONP,因为我对其他服务器没有任何控制权。我还需要反复检查服务器是否正常运行,因为它可能在某些时候不可用。所有这些都不容易。

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

我无法在服务器端执行此操作,因为服务器端可能或可能没有其他服务器的可见性,我真正关心的是客户端(Web浏览器)具有可见性。

我可以在页面上添加一个新的iframe,其中src等于远程服务器地址,但是如何检查何时(IF)iframe内容已成功加载?另外我如何定期提出请求?通过反复创建新的iframe?这似乎很不洁净。

有没有办法干净可靠地做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

  

我知道由于跨域限制,我不能使用ajax。

不正确。见JSONP