2013-04-21 17 views
8

ve kayıt done, fail ve then işleyicileri sonra çağrılmaz:jQuery .fail() Ben jQuery.Deferred kullanıyorum

$.when(some_ajax(url)) 
    .done(function(result){}) 
    .fail(function(){}) 
    .then(function(){}); //just like that, with a single parameter 

buldum benim ajax o çağrı başarılı, done ve then geri aranıyor, bu sırayla. Ancak ajax başarısız olduğunda, fail geri arama denir ama ben then geri arama alamadım.

jQuery.Deferred belgelerini okudum, ancak bu davranışa ilişkin bir ipucu bulamadım.

yerine then ait always kullanarak, her iki durumda da denir - başarı ve başarısızlık (done/fail ilk denir, daha sonra always denir). Belge, açıklanan senaryomda always ve then arasında beklenen bir farka işaret ediyor gibi görünmüyor, neden farklı davranıyorlar?

+0

başarısız davayı ele almak için oldukça normal (sanırım Arun P Johny'nin cevabında söylediği şey bu). Yoksa, aynı zamanda, gerçek kodunuzda o zaman() 'ya bir başarısızlık işleyicisini mi geçiyorsunuz? –

+0

@ FrédéricHamidi teşekkürler, umarım sorum şu anda açıktır (düzenlenir) – Haji

+0

Gerçekten daha açık ve Arun'ın cevabı doğrudur: 'sonra() 'aramanız sizin için sadece başarısızlık değil, başarısızlık, işleyiciniz için mantıklıdır. arıza durumunda çağrılabilir. –

cevap

19

.then() sözdizimi .then(successCallback, failureCallbacl) olup, bu nedenle başarı durumunda her ikisi de denir ve arıza durumunda yalnızca fail çağrılır. Senin durumunda

Eğer .then() yöntemin tek bir geri arama geçiyoruz, bu bir başarı geri arama olarak tescil, bu nedenle iki başarı geri aramalar done() ve .then() başka birine kayıtlı birine sahip olacaktır. Ama hata durum için size bir geri arama daha sonra kullanmak bakılmaksızın başarı/başarısızlık çağrılacak istiyorsanız tek geri arama .fail()

kayıtlı olan .always()

o yüzden `Senin çağrı sonra()` sadece başarıyı kolları
+5

@downvoters, –

+1

açıklamasını açıklıyor Cevabın haklı olduğundan şüpheliyim (emin olmak için sorudan daha fazla bilgiye ihtiyacımız var), ama belki de yeterince açık değil. Her ikisi de * denilen başarı durumunda * ne demek istediğimi açıklığa kavuşturmaya çalışmanızı öneririm, şu anda * hem başarı hem de başarısızlık işleyicileri * olarak anılabilir, yanlıştır. (Geçerken, düşüş notlarını dengelemeye çalıştım, ama muhtemelen hemen önceki yorumunuzu silmelisiniz: gereksizdir, saldırgan olarak görülebilir ve durumunuza yardımcı olmaz). –

+0

@ FrédéricHamidi tamam, cevabını güncelledim, bu kadar yeterli –

İlgili konular