Pergunta

I have a web page that i want it to refresh every 2 minutes, using the following code:

location.reload();

The problem is that I assume that the user is connected; but if it happened that s/he is not connected online the page will fail and give the default browser(no connection error page ); and the page will never refresh except manually by the user

can i include a ping mechanism to decide weather to refresh or not?

Foi útil?

Solução

You can use navigator.onLine to detect a network connection

setInterval(function() {
    if (navigator.onLine) {
        location.reload();
    }
}, 120000); /* 120000 ~> 2 minutes */

otherwise, you may use instead an HEAD ajax request to a same-domain resource and refresh the page only if the response return a 200/304 status, e.g.

setInterval(function() {

    $.ajax({ 
        url  : "/favicon.ico", /* or other resource */
        type : "HEAD"
    })
    .done(function() {
        location.reload();
    });
}, 120000); /* 120000 ~> 2 minutes */

Outras dicas

One possibility is to send a query to your server or a very reliable server and check if you get a reply.

The problem with navigator.onLine is that it tells the browser status, but the browser may have an online status while there is no network.

See: Detect Internet Connection as in Gmail Javascript

You could use the boolean :

if (navigator.onLine) {
    //Actions
}

Try this,

var clrInterval=null;
clrInterval = setInterval(function(){
    $.ajax({
       url:'',data:'',
       success:function(data);{
         if(data=='no-success') {
            // your code if no-success
         } else {
            clearInterval(clrInterval);// clear interval if you get success
         }
       }
    });
},5000);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top