2013-07-26 24 views
17

Aşağıdaki gibi açısal kullanarak bir http isteği gönderiyorum.

$http({ 
    url: url, 
    params: params, 
    method:'POST', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
    }, 
    timeout: 60000 //60 seconds 
}).success(function(data, status, headers, config) { 
    //do something 
}).error(function(data, status, header, config) { 
    if(timedout){ //determine occurrence of timeout. 
     //invoke timeout handler 
    } else 
     //handle other error 
    } 
}); 

Zaman aşımını nasıl belirleyebilirim?

Bu durumda "0" durum kodu alındığını gözlemledim. Zaman aşımı için status == 0 kontrol etmek güvenli midir?

Lütfen HTTP İstek zaman aşımını (durum kodu 408) sormuyorum.

+1

Tek bildiğim, 'status === 0' ** **' nin bir zaman aşımını sembolize etmemesidir. t doğru bir HTTP durumuyla cevap verin, ya da uzun boylu. – Blackhole

+2

Ayrıca bir aramanın iptal edildiği durumdur. – Francisc

cevap

19

Ben

var startTime = new Date().getTime(); 
$http.post(...) 
    .success(function(resp, status, header, config) {...}) 
    .error(function(resp, status, header, config) { 
     var respTime = new Date().getTime() - startTime; 
     if(respTime >= config.timeout){ 
      //time out handeling 
     } else{ 
      //other error hanndling 
     } 
    }); 
+2

Güzel bir geçici çözüm, ancak veri için kontrol ediyordum == null ve status == 0, zaman aşımından hemen önce bir hata alıp javaScript respTime'da kontrol etmek için daha iyi değil>> config.timeout? if (veri == null && status == 0 && respTime> = config.timeout) –

6

Sadece kaynak kodunu okudum. $httpBackend'un kaynak kodunda, xhr.ontimeout işlenmiyor. xhr.ontimeout'u uygulamalıdırlar.

Ne yazık ki Angularjs şimdilik http zaman aşımı işlemlerini desteklemiyor. :(

+2

açısal, http zaman aşımını destekliyor, sorun, zaman aşımını ağ ile ilgili diğer hatalara ayırmaktır. – Max

1

Angular's documentation göre, timeout parametre milisaniye cinsinden ifade edilir ... aşağıda bunu yapmış.

Yani olan 1 milisaniye dakikaya ayarlıyorum ediyoruz Bu durum, muhtemelen% 99.9999 oranındaki isteğin başarısız olmasını sağlayacaktır.

+0

Teşekkür ederiz. Sorudaki zaman aşımını güncelledim. –

İlgili konular