AJAX complete olayını bir davranıştan dinleyin


12

AJAX düğmesi olan bir form var. Tıkladığımda, beklendiği gibi bir sürü şeyi günceller, bu da iyidir.

AJAX çağrısı tamamlandığında çağrılan bir dinleyici oluşturmak için bir yol olup olmadığını merak ediyordum?

Teşekkürler

Yanıtlar:


19

Evet var :

Drupal.behaviors.YourBehaviour = {
attach: function(context, settings) {  
  $('#yourform').ajaxComplete(function(event, xhr, settings) {
    if ($(event.target.id) == 'the-id-of-your-item') {
      // Your code here
    }
  });
 }
}

2
+1, ancak Drupal 7 için olurduDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

Haklısın: yapıştırırken bir çizgiyi unuttun!
Countzero

2
bir nesneye başvurmuyorsanız bu $ () sadece event.target.id dosyasına ihtiyacınız yoktur
Nikola

Neden Drupal davranışlarına sarmalıyım?
ram4nd

1
Çünkü en iyi uygulama olarak kabul edilir ve diğer şeylerin yanı sıra ad alanı çarpışmalarını önler.
Countzero

11

JQuery 1.8+ sürümleri için, şimdi, belgeye değil form veya görünümü kendisi (bkz .ajaxComplete işlevini eklemelidir görünüyor http://api.jquery.com/ajaxcomplete/ )

Aşağıdakiler benim için Jquery 1.10 ve Views 7.x-3.8 ile D7'de çalıştı, burada "your_view_id" görünümün "Diğer" ayarlar panelinde ayarlanan görünümün makine adıdır. Olay, xhr ve ajax sonucunun istediğiniz görünüm için olup olmadığını belirlemek için ayarlanması gereken birçok başka bilgi var, ancak bu durumum için çalıştı:

jQuery(document).ajaxComplete(function(event, xhr, settings) {
    if(typeof settings.extraData != 'undefined' && typeof settings.extraData.view_display_id != 'undefined') {

        switch(settings.extraData.view_display_id){

            case "your_view_id":

                console.log('your_view_id ajax results!');

                break;

            default:

                console.log('some other ajax result...');

                break;

        }
    }

});

4

Verilen çözümlerin hiçbiri Drupal 7.24, jQuery 1.11 ve Views 7.x-3.8 ile işe yaramadı .

Ne user1193694 önerdi kötü değildi, ama ayarlar ı yoktu aldığını nesne extraData parametresini.

Ayarlar nesnesini ayrıştırırken, settings.data uygun ' görünüm_adı = ' ve görünümünüzün makine adını içerdiğini gördüm , bu yüzden ne için filtreliyorum:

jQuery(document).ajaxComplete(function(event, xhr, settings) {

    // see if it is from our view
    if (settings.data.indexOf( "view_name=your_views_name") != -1) {

            console.log('your_view_id ajax results!');

    }
});

' Görüşleriniz_adı ' yerine görünümünüzün makine adını yazın.

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.