【问题标题】:How can I check whether another server is up in javascript?如何检查另一个服务器是否在 javascript 中启动?
【发布时间】:2011-06-23 22:47:50
【问题描述】:

在我的 web 应用程序中,我需要检查另一台服务器(在不同的 IP 地址上)是否已启动。我知道由于跨域限制,我不能为此使用直接 ajax 请求。我无法使用 JSONP,因为我无法控制其他服务器。我还需要反复检查服务器是否启动,因为它有时可能不可用。所有这些都不容易。

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

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

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

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

【问题讨论】:

    标签: javascript html ajax cross-domain


    【解决方案1】:
    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 谢谢,这是个好主意!我假设如果服务器没有启动,那么高度将不一样。如果服务器没有启动,有没有办法在 10 秒后重试?
    • @AnupamJain 添加了else 案例。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      不正确。见JSONP

      【讨论】:

      • 一个更简单的解决方案是尝试从其他服务器加载一个小图像。
      • 您应该将其发布为@Raynos 的答案,这真是个好主意。
      • @Raynos 我并没有说它是完美的,只是纠正一个误解。
      • 我知道 JSONP,但问题是我无法控制其他服务器。
      • @Anupam Jain 如果您知道 JSONP 可以做到这一点,那么您的 I know I can't use ajax for this because of cross domain restrictions. 声明就没有意义?
      猜你喜欢
      • 2017-02-27
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2019-11-12
      • 2011-07-10
      相关资源
      最近更新 更多