Başarı ve hata yerine yeni jQuery AJAX kodu için .done () ve .fail () kullanmalı mıyım


167

Ben böyle kodladım:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

Ama sonunda jQuery .ajax()belgelerine baktığınızda ben aşağıdaki gibi kodlama gerektiğini önermek gibi görünüyor ya da en azından a .done()ve a eklemeyi önerir .fail():

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

Güncelleme

Ben böyle kod eğer aynı ya da üç içine kırma bazı avantajı var mı?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

Yanıtlar:


165

User2246674 tarafından belirtildiği gibi, ajax fonksiyonunun successve errorparametresi olarak geçerlidir.

Emsal cevapla tutarlı olmak için dokümanı okuyun:

Kullanımdan Kaldırılma Bildirimi :

JqXHR.success (), jqXHR.error () ve jqXHR.complete () geri çağrıları jQuery 1.8'de kullanımdan kaldırılacaktır. Kodunuzu nihai olarak kaldırılmak üzere hazırlamak için, bunun yerine jqXHR.done (), jqXHR.fail () ve jqXHR.always () kullanın.

Eğer geri arama işleme işlevini kullanırken, kullanmayı (yöntem zincirleme örneğin kullanılarak) .done(), .fail()ve .always()yerine success(), error()ve complete().


54
Katılmıyorum. Hakkında referanslar görüşmeler geri arama-manipülasyon fonksiyonlarına (örn .error, .success) vardır daha evrensel Ertelenmiş desen lehine önerilmemektedir, ancak hiç parametreleri ajaxyöntemiyle kaldırılmış değildir ve geçerli ve kabul edilebilir hem - hatta jQuery 1.9 / 2.0! Mevcut tüm formlarda ajaxyine de bir Ertelenmiş; büyük olasılıkla zaten eklenmiş olan Ertelenmiş geri aramalarla.
user2246674

1
İşte, jQuery 1.9 ve başarı :, hata: ve tamamlandı: hala kullanılabilir. Ancak sorum şu: .done () == başarı için:?
TARKUS

3
JQuery 1.10 kaynak kodu itibaren @GregoryLewis: jqXHR.success = jqXHR.done;.
Michael Laffargue

9
Dürüstçe tercih ediyorum success, fail, always.
ahnbizcad

4
WOW, belgeleri de yanlış okudum. Kelimenin tam anlamıyla $ .ajax için 'başarı' / 'hata' seçeneklerinin 'tamamlandı / başarısız' olarak yeniden yazıldığını düşündüm. Sadece geri çağırma yöntemi zincirleriydi. Dürüst olmak gerekirse, seçenek adlarını da değiştirmeleri gerektiğini düşünüyorum. Bu beni saatlerce güldü.
OzzyTheGiant

12

@Michael Laffargue'un gönderisine bir şey eklemek istiyorum:

jqXHR.done() daha hızlı!

jqXHR.success()geri aramada biraz yükleme süresine sahip olabilir ve bazen komut dosyasını aşırı doldurabilir. Bunu daha önce zor yolda buldum.

GÜNCELLEME:

Kullanılması jqXHR.done(), jqXHR.fail()ve jqXHR.always()daha iyi ajax isteği ile idare edebilirsiniz. Genellikle bazı değişken veya nesnelerde ajax tanımlayabilir ve bu değişkeni veya nesneyi kodunuzun herhangi bir bölümünde kullanabilir ve verileri daha hızlı alabilirsiniz. İyi örnek:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

9
Güvenilir ve doğrulanabilir referanslarınız var mı?
Paul Vargas

@PaulVargas Hiçbir zaman performans testi yapmıyorum ama pratiğimde bunun işe yaradığını görüyorum. Kendiniz deneyebilirsiniz.
Ivijan Stefan Stipić

1
Lütfen güvenilir herhangi bir kanıt sağlayın.
wonsuc

Bildiğiniz gibi, geri çağırma işlevleri, bazı nesneleri işlevden döndürmekle karşılaştırıldığında daha yavaştır. Bazen küçük bir etki olur, ancak çok fazla çağrınız varsa bazen çok büyük olabilir.
Ivijan Stefan Stipić

7

Basit bir deyişle

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

Eğer info.text'i alırsa o zaman uyarır ve eklediğiniz herhangi bir işlev veya herhangi bir sunucudan info.text'i nasıl alamazsa uyarı veya hata fonksiyonu.


0

Eski mevcut uygulamamızda JQuery'yi 1.x'ten 2x'e veya 3.x'e geçireceğimizde, JQuery yukarı tonlaması bu yöntemlerden kaldırılacağı için başarı yerine .done, .fail yerine hata kullanacağız. sunucu web yöntemlerine bir çağrı yaptığımızda, sunucu söz verilen nesneleri çağrı yöntemlerine (Ajax yöntemleri) döndürür ve bu söz nesneleri .done, .fail..etc yöntemleri içerir. Aşağıda örnek (GET gibi istek türü için oluşturabileceğimiz POST isteği için geçerlidir ...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.