0

次の関数をx秒ごとに呼び出したいので、ページを更新する必要はありません。

var rq = new XMLHttpRequest();
rq.open('GET', "SAME DOMAIN ADDRESS", true);
rq.onreadystatechange = function() {
    if(rq.readyState === 4) {
        if(rq.status === 200) {
      clearTimeout(xmlHttpTimeout); 
window.location.href = "Tracker.html"; // if internet connection found, redirect.
        } else {
        }
    }
};
rq.send(""); 
var xmlHttpTimeout=setTimeout(ajaxTimeout,5000);
function ajaxTimeout(){
   rq.abort();
// IF no internet connection found, call this whole javascript function/code AGAIN in 5 seconds! to check for internet connection
}

基本的に、ページ全体を更新せずにインターネット接続を確認したいのですが、更新されている場合は、にリダイレクトします。Tracker.html

4

3 に答える 3

1

最良のアプローチは、次を使用することsetTimeoutです。

function callMe() {
  // Some Code
  setTimeout(callMe, 1000);
}

callMe();

コードは次のようになります。

var rq = new XMLHttpRequest();

rq.onreadystatechange = function() {
  if(rq.readyState === 4) {
    if(rq.status === 200) {
      window.location.href = "Tracker.html"; // if internet connection found, redirect.
    } else {
      setTimeout(rq.send, 5000);
    }
  }
};

rq.send();

クライアントが接続されているかどうかを確認したい場合は、こちらで説明されている新しいオンライン イベントとオフライン イベントを使用することもできます。

于 2012-12-28T14:36:37.950 に答える
1

navigator.onLineが真か偽かを確認します。

于 2012-12-28T14:36:50.817 に答える
0

ajax ソリューションは、同じドメインでのみ機能します。ただし、同じドメインでは、サーバーがオンラインかどうかをテストする必要はないでしょう。navigator.onLine を使用すると、インターネットにアクセスできるかどうかが示されますが、それでも適切なサーバーに到達できない可能性があります。

トリックは、ターゲット サーバーのイメージをロードしようとし、エラーが発生した場合は 5 秒後に再試行することです。画像が正常にロードされたら、リダイレクトを実行できます。

<html>
  <header>
  </header>
  <body>
    <script type="text/javascript">
    var img = new Image();
    var ping = function() { img.src = "http://www.somedomain.com/valid_image.jpg"; }
    ping();

    img.onerror = function(e) {
      console.log('error');
      setTimeout(function() {
        ping();
      }, 5000);
    }

    img.onload = function(e) {
      console.log('YES');
      window.location.href = "http://www.google.com"; 
    }
    </script>

  </body>
</html>
于 2014-11-14T08:57:04.400 に答える