JavaScript:如果没有响应,则停止SetInterval

时间:2013-02-06 10:37:05

标签: javascript setinterval

我正在使用navigator.OnLine的替代代码来检查网络连接。然而,它有用,但我遇到了一些问题。

如果我已连接/断开内部网(公司网络)内的网络,那么我没有任何问题。但是,如果我在家并且我已连接到我的家庭网络,但未使用VPN连接连接到公司内部网,则窗口将冻结10秒间隔。我认为这是因为有互联网连接,但服务器无法访问,因为我已从内联网断开连接。

以下是代码:

function serverReachable() {
  // IE vs. standard XHR creation
  var x = new ( window.ActiveXObject || XMLHttpRequest )( "Microsoft.XMLHTTP" ),
      s;
  x.open(
    // requesting the headers is faster, and just enough
    "HEAD",
    // append a random string to the current hostname,
    // to make sure we're not hitting the cache
    "http://16.24.163.33" + window.location.hostname + "/?rand=" + Math.random(),
    // make a synchronous request
    false
  );
  try {
    x.send();
    s = x.status;
    // Make sure the server is reachable
    return ( s >= 200 && s < 300 || s === 304 );
  // catch network & other problems
  } catch (e) {
    return false;
  }
}

我想要帮助的是取消超过一秒钟的请求。因此,如果我试图从家中到达16.24.163.33,并且在1(!)秒后没有收到响应,则取消请求,并在两分钟后重新尝试整个代码。

setInterval(function () {
    if (serverReachable()) {
        if (timeout === null) {
    var changeIt = document.getElementById('change')
    changeIt.style.visibility = 'hidden';
           timeout = setInterval("refreshIframe()",25000);
        }
    } else {
        clearTimeout(timeout);
        timeout = null;
    var changeIt = document.getElementById('change')
    changeIt.style.visibility = 'visible';
       }
}, 900);

0 个答案:

没有答案