2013-06-17 18 views
7

Merak ediyorum, zaman aşımlarını jQuery.ajax() ile işlemenin en iyi yolu nedir? Şu anda benim çözümüm: Zaman aşımı oluşursa, sayfa yeniden yüklenecek ve senaryo, verilen zaman dilimine göre veriyi yüklemek için bir şans daha kazanacaktır.jQuery.ajax() - Zaman aşımları en iyi nasıl yapılır?

Sorun: "get_json.php" (aşağıdaki örnek) gerçekten mevcut değilse, sonsuz bir yeniden yükleme döngüsü haline gelecektir. Olası çözüm: sayaç ekleme ve $ x yeniden yükleme sonrasında iptal etme.

Soru 1: En iyi zaman aşımı hatası nasıl ele alınır?

Soru 2: Bir zaman aşımı için önerilen zaman aralığı nedir ve neden?

Kod: önceden

$.ajax({ 
    type: "POST", 
    url: "get_json.php", 
    timeout: 500, 
    dataType: "json", 
    success: function(json) { 
     alert("JSON loaded: " + json); 
    }, 
    error: function(request, status, err) { 
     if (status == "timeout") { 
      // timeout -> reload the page and try again 
      console.log("timeout"); 
      window.location.reload(); 
     } else { 
      // another error occured 
      alert("error: " + request + status + err); 
     } 
    } 
}); 

teşekkürler!

+5

Ajax çağrısını yeniden denemek yerine neden tüm sayfayı yeniden yüklemeliyim? – JJJ

+1

@Juhana: $ .ajax (bu) demek istiyorsun; ? –

+2

Eh, örneğin, örneğin. – JJJ

cevap

4

Başka bir şekilde de yapabilirsiniz, zaman aşımı gerçekleştiğinde önce aralığı temizleyebilirsiniz. Bu clearInterval() işlevini kullanırsanız, sayfayı yeniden yüklemeniz gerekmeyecektir. Otomatik olarak duracak.

function ajax_call(){ 
$.ajax({ 
     type: "POST", 
     url: "get_json.php", 
     timeout: 500, 
     dataType: "json", 
     success: function(json) { 
      alert("JSON loaded: " + json); 
     }, 
     error: function(request, status, err) { 
      if (status == "timeout") { 
       // timeout -> reload the page and try again 
      clearInterval(ajax_call); 
       window.location.reload(); //make it comment if you don't want to reload page 
      } else { 
       // another error occured 
       alert("error: " + request + status + err); 
      } 
     } 
    }); 
} 

setInterval(ajax_call,timeout_duration); 
İlgili konular