2016-03-31 31 views
0

Internet bağlantınızı kontrol eden (iyi çalışıyor) ve her 20 saniyede bir sayfayı yenileyen bir işlev üzerinde çalışıyorum. Üzerinde çalıştığım diğer bir işlev, internet durumunun ne zaman değiştiğini ve yenileme işlevini durdurduğunu algılar. Çalışmaya çalışıyorum, böylece internet tekrar çevrimiçi olduğunda, yenileme fonksiyonu tekrar başlar. Birden çok düzeltmeyi denedim ama hiçbir şey çalışmıyor. internet bağlantısı sonra yenileme fonksiyonunun yeniden başlamazsa, çevrimiçi dönene kadarJavascript - Bir işlevden clearInterval kullandıktan sonra setInterval'ı yeniden etkinleştirme

function checkNetConnection() 
{ 
    var xhr = new XMLHttpRequest(); 
    var file = "http://i.imgur.com/FIKb6D8.png"; 
    var r = Math.round(Math.random() * 10000); 
    xhr.open('HEAD', file + "?rand=" + r, false); 
    try { 
     xhr.send(); 
     if (xhr.status >= 200 && xhr.status < 304) { 
      return true; 
     } else { 
      return false; 
     } 
    } catch (e) { 
     return false; 
    } 
} 

function modalCheck() 
{ 
    var status = checkNetConnection(); 
    if(status == false) { 
     document.getElementById('mymodal').style.display = "block"; 
    } else { 
     document.getElementById('mymodal').style.display = "none"; 
    } 
} 

var int1 = setInterval(modalCheck, 7000); 

function refreshPage() 
{ 
    var state = checkNetConnection(); 
    if(state == false) 
    { 
     clearInterval(int2); 
    } else {      
     location.reload(true); 
     alert("PAGE RELOADED!"); /* Testing purposes! */ 
    } 
} 

var int2 = setInterval(refresh, 12000); 

Her şey iyi çalışır:

İşte bazı kod. Bu düzeltmeye çalıştığım şey.

Teşekkürler.

+0

Olası yinelenen [Yanıtı eşzamansız bir çağrıdan nasıl geri verebilirim?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- ara) –

cevap

1

Her şeyden önce, sayfanın gerçekten yenilenmesini engellemezsiniz.

Sizin internet denetimi bu gibi yenileme durmalı işlevi:

function modalCheck() 
{ 
    var status = checkNetConnection(); 
    if(status == false) { 
     document.getElementById('mymodal').style.display = "block"; 

     clearInterval(int2); //Connection lost! DO NOT REFRESH 
     int2 = null; //So the next if statement can detect whether the interval is going or not 

    } else { 
     document.getElementById('mymodal').style.display = "none"; 

     if(!int2) { //So interval isn't doubled up! 
      int2 = setInterval(refresh, 12000); //Connection regained! 
     } 
    } 
} 

refresh() işlevi var olmadığından İkincisi, sayfanız muhtemelen yenilemez:

setInterval(refresh, 12000); //should be "refreshPage" 

O hepsi olmalı! Umarım projen iyi gider!

+1

Teşekkürler dostum! Mükemmel çalışıyor. Evet, eski bir kod kopyaladım, bu yüzden yenileme işlemi yanlış adlandırıldı. – clintgx

İlgili konular