2016-03-18 4 views
3

私は指定された間隔でページをリロードするソリューションを探していましたが、そのページの元のサーバーがそのページを配信できる場合に限ります。ネットワークの問題やサーバーの問題などにより、ページがリロードされないようにする必要があります。空のページにエラーメッセージを読み込むのではなく、ほとんどの場合、これが優先されるように思われるので、私は少し驚いています。ウェブページの定期的な再読み込み(ページが利用可能な場合のみ)

Javascript: Check if server is online?

しかし、それは定期的にリロードんが、私は、それはネットワークが機能していない場合はリロードしようと停止しません(I:

私はstackoverflowの上ですでに解決へ追加しようとしましたこれをシミュレートするにはWiFiをオフにします)。私はサーバーの問題をシミュレートしようとはしませんでした。

function reloadpage() { 
    setTimeout(checkServerStatus, 60000); 
} 

function checkServerStatus() { 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() { 
     location.reload(true); 
    }; 
    img.src = "http://some/image.jpg"; 
} 
+0

キャッシングが原因で発生する可能性があります。イメージURLにランダムなパラメータを追加しようとしましたか? –

答えて

2

この

function checkPage(interval) { 
    interval = interval || 10*60*1000; // every 10 minutes 
    setTimeout(function(){ 
     $.ajax({ method: 'HEAD', url: 'http://'}) 
      .done(function(){   // headers retrieved ... it's alive 
       location.reload(); 
      }) 
      .fail(function(){   // sorry we failed 
       checkPage(6000);  // check again but in 1 min 
      }) 
    }, interval); 
} 

checkPage(5*60*1000);     // reload in 5 minutes 

これはintervalミリ秒後にサーバヘッダを要求します試してみてください。ここでは

は、定期的なリロードの私の非作業バージョンです。到着した場合、サーバーが起動し、リロードします。そうでない場合は、1分後に再度確認します。

ページがあることを保証する場合は、HEADGETに変更し、返されたhtmlが期待どおりであることを確認してください。

1
function reloadpage() { 
    $.ajax({ 
     url: "your url", 
     type: "GET", 
     complete: function(e, xhr, settings) { 
      if (e.status === 200 || e.status == 304) { 
       location.reload(); 
      } else { 
       alert("server unreacheable. Do not reload"); 
      } 
     } 
    }); 
    setTimeout(reloadpage, 10000); 
} 

setTimeout(reloadpage, 10000); 
+0

この解決法は、次のような場合に動作すると思われます。img.src = "http://some/image.jpg?v =" +(新しい日付())getTime();インターネット切断(例:WiFiはラップトップクライアントではオフになります)が、サーバーが動作していないときは動作しません(この場合、サーバー上のTomcatをオフにします)。次に、503エラーを返します。これを修正するために、|| e.status == 503しかしそれは何も変わらなかった。 –

関連する問題