SORU
12 Ocak 2012, PERŞEMBE


bir WordPress kullanmak.ajax işleme tepkiler devam ediyor: &; başarı":" vs ".bitti"?

JQuery ile çalışan ve birkaç hafta AJAX var ve iki farklı yolu 'arama yapıldıktan sonra script: success: .done. devam etmek gördüm

jQuery documentation Özet elde ederiz:

.() bitti: Açıklama: Ertelenmiş nesne çözüldüğünde işleyicileri çağrılacak Ekleyin.

başarı: (.() ajax seçeneği): eğer istek başarılı olursa çağrılacak Bir fonksiyon.

AJAX arama tamamlandıktan sonra bir şeyler yapmak hem de böylece çözüldü/. Bir veya diğer rasgele kullanabilir miyim? Ne biri diğerinin yerine kullanıldığında fark nedir?

CEVAP
12 Ocak 2012, PERŞEMBE


success başarı jQuery geri arama, ajax arama bir seçenek olarak tanımlanan geleneksel isim olmuştur. $.Deferreds ve daha gelişmiş aramalar, done uygulaması başarı geri aramaları için tercih edilen bir yöntem olduğundan, ancak deferred herhangi çağrılabilir.

Örneğin, başarı:

$.ajax({
  url: '/',
  success: function(data) {}
});

Örneğin, bitti:

$.ajax({url: '/'}).done(function(data) {});

done güzel tarafı dönüş $.ajax değeri şimdi uygulamanızda başka bir yere bağlanabilir ertelenmiş bir sözdür. Hadi bu ajax birkaç farklı yerden arama yapmak istediğiniz söyleyin. Yerine geçen başarı fonksiyonu olarak bir seçenek işlevi yapan bu ajax çağrı, sadece dönüş fonksiyonu $.ajax kendisi ve bağlamak size geri çağrıları ile done, fail, then, ya da her neyse. always istek başarılı veya başarısız çalışacak bir geri çağırma olduğunu unutmayın. done sadece başarı tetiklenir.

Örneğin:

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json',
    beforeSend: showLoadingImgFn
  })
  .always(function() {
    // remove loading image maybe
  })
  .fail(function() {
    // handle request failures
  });

}

xhr_get('/index').done(function(data) {
  // do stuff with index data
});

xhr_get('/id').done(function(data) {
  // do stuff with id data
});

Sürdürülebilirlik açısından bu önemli bir fayda uygulamaya özel bir işlevi ajax mekanizması sarılmış olman. Eğer sen karar vermek zorundasın $.ajax arama çalışması farklı gelecek, ya da kullandığınız farklı bir ajax yöntemi, ya da sen uzaklaş DV sadece değiştirmek için xhr_get tanımı (emin olmak için bir dönüş söz ya da en azından bir done yöntem, davanın örnek yukarıda). Uygulama boyunca tüm diğer başvurular aynı kalabilir.

Çok fazla var (çok daha iyi) şeyler yapabilirsiniz ile $.Deferred, hangi birini kullanın pipe tetikleyici bir başarısızlık bir hata bildirdi sunucu, bile $.ajax istek başarılı olur kendisi. Örneğin:

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json'
  })
  .pipe(function(data) {
    return data.responseCode != 200 ?
      $.Deferred().reject( data ) :
      data;
  })
  .fail(function(data) {
    if ( data.responseCode )
      console.log( data.responseCode );
  });
}

xhr_get('/index').done(function(data) {
  // will not run if json returned from ajax has responseCode other than 200
});

Daha fazla $.Deferred buradan okuyabilirsiniz: http://api.jquery.com/category/deferred-object/

NOT: JQuery 1.8, pipe aynı şekilde then kullanarak lehine kalmıştır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damien Hayes

    Damien Hayes

    11 Mart 2008
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • Joe DiFeo

    Joe DiFeo

    7 AĞUSTOS 2012