2013-11-03 26 views
5

Denetleyicideki bir eylem için jquery-ajax çağrım var. Bazen arama başarısız oluyor, bu yüzden tekrar tekrar denemek istiyorum.Hata durumunda jquery ajax'ı yeniden deneyin

jQuery ajax: Yukarıdaki kod

return ajax({ 
    url: getRootDir() + urlDoTask, // urlDoTask is something like "/Action/" 
    data: { param: someParam }, 
    type: 'POST', 
    dataType: 'json', 
    tryCount: 0, 
    retryLimit: 3 
}).then(function (data) { 
    // Do some stuff 
    return .... 
}, function (xhr, textStatus, errorThrown) { 

    if (textStatus == 'timeout' || (xhr.responseText == "" && textStatus == 'error')) { 
     this.tryCount++; // this is always 1 
     if (this.tryCount <= this.retryLimit) { 
      //try again 
      $.ajax(this); 
      return; 
     } 
     return; // this point is never reached 
    } 
    if (xhr.status == 404) { 
     // Do some stuff 
    } 

    return ... // I want to reach it after this.tryCount > this.retryLimit 
}); 

function getRootDir() { 
    var loc = window.location.pathname; 
    var dir = loc.substring(0, loc.lastIndexOf('/')); 

    return dir; 
} 

çalışmıyor, tryCount 1 ajax çağrı başarısız her zaman her zaman. Ayrıca, bu.tryCount this.retryLimit'den büyük olduğunda, son dönüşe asla ulaşılamaz.

Fikirler?

+0

Benim yorumumun nedenini aşağıda görebilirsiniz. Ancak, bunun yerine tüm ajax çağrısının üzerinden tekrar denemenizi öneririz. Bu şekilde, yeniden deneme kontrollerinizi yönetmek için dış durumlu bir nesneye sahip olabilirsiniz. –

+0

Belki de http://stackoverflow.com/a/10024557/694325 adresindeki notasyonu deneyin. Bu gösterimin kapsam veya bir şeyle karışıp dağılmadığından emin değilim. Bu sorunu düzeltmeyi başardınız mı? – Nenotlep

+0

olası bir kopyası [Başarısız bir ajax isteğini nasıl gönderebilirim?] (Http://stackoverflow.com/questions/8881614/how-do-i-resend-a-failed-ajax-request) – user2284570

cevap

1

Gördüğüm birkaç şey var. Geçirilen argümanlar aslında nesnenin üyeleri değildir. Sadece bir JSON anahtar/çift haritası. Yani "this.tryCount" gibi şeyler işlevde olmayacak. Yapabilecekleriniz, işlevinize (veya hata ayıklama) uyarıları koymak ve değerlerin ne olduğunu görmek. Muhtemelen undefined veya 0

+0

Yorumunuz için teşekkürler, ancak başarısız olduğunda aynı ajax çağrısının nasıl tekrarlanacağını, yani denetleyicide aynı eylemi nasıl çağırdığını gösterebilir misiniz? Bir örnek örneği çok takdir edilecektir. – user1624552

İlgili konular