2013-03-04 12 views
5

kesildi Means olmadığını belirleme: my beş saniye süreç bekliyor çalıştırmak için iseJQuery Hata Çağrı aşağıdaki gibi ben biraz uzun süren jQuery Ajax çağrısı (5 saniye diyelim) olduğunu varsayalım

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     alert('Error!'); 
    } 
}); 

Şimdi varsayalım Kullanıcı sabırsız bir şekilde büyüyor ve sayfamda bir tür navigasyona girmeye karar veriyor. Yukarıdaki çağrıda ne olur, kullanıcı bir bağlantıyı tıklattığında Hata uyarısını alır.

Gerçekten bir hata varsa, hata uyarısının görüntülenmesini istiyorum, ancak tüm bu olanlar kullanıcının uzaklaşmaya karar vermesi durumunda hata uyarısının görüntülenmesini istemiyorum. Bunu nasıl yapabilirim? Başka bir deyişle, kontrol ettiğim bir hata var mı (xhr.status belki?). Bu, meydana gelen hatanın basitçe işlemin kesintiye uğradığını ve hata görmezden geldiğimi bildiğimi söyleyecektir?

Teşekkürler!

+1

Hata geri bildiriminin 2. ve 3. argümanlarını inceleyin. –

+0

İkinci argüman "error". Üçüncü argüman "" dır. Bu durumda ne anlatabildiğimden de yararlı değil. –

+0

Bu durumda, ilk argümanın özelliklerini gözden geçirin. –

cevap

8

gibi yakın söyleyebilirim, bunu yapmanın en iyi yolu içinde xhr.readyState kontrol etmektir senin hata işleyici. 4'ten küçük herhangi bir değer, işlemin hala devam ettiğini gösterir, bu nedenle tarayıcıda kesintiye uğrayacak bir şey olduğu anlamına gelir.

Ayrıca, ajax işlemini durdurmaya çalışmak için xhr.abort() yöntemini de çağırmak istersiniz, böylece kullanıcının xhr.abort çağrısına rağmen navigasyon gerçekleşmeden önce bitmesini beklemek zorunda kalmaz () aslında şeyleri hızlandırmaz.

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     if (xhr.readyState < 4) { 
      xhr.abort(); 
     } 
     else { 
      alert('Error!'); 
     } 
    } 
}); 
3

documentation Okuma, senin hata işleyicisi böyle olması gerektiğini bir tahminde olacaktır:

error(xhr, textStatus, errorThrown) { 
    if(textStatus != "abort") { 
     alert("Error!"); 
    } 
} 
+0

Bu benim de düşündüğüm şeydi, fakat aslında durumu incelersem, hata bir kesinti olduğunda "hata" olur. –

+0

'errorThrown' nedir? –

+0

Yukarıya bakınız. Boş dize. –