Dengarkan acara lengkap AJAX dari perilaku


12

Saya memiliki formulir yang memiliki tombol AJAX. Ketika saya klik, itu memperbarui banyak hal seperti yang diharapkan yang baik-baik saja.

Saya bertanya-tanya apakah ada cara untuk membuat pendengar dalam perilaku yang dipanggil saat panggilan AJAX selesai?

Terima kasih

Jawaban:


19

Ya ada :

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, tetapi untuk Drupal 7 itu akan menjadiDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

Anda benar: lupa garis saat menempel!
Countzero

2
Anda tidak memerlukan $ (ini) hanya event.target.id Anda tidak mereferensikan objek
Nikola

Mengapa membungkusnya dengan perilaku Drupal?
ram4nd

1
Karena itu dianggap praktik terbaik dan mencegah tabrakan ruang nama, antara lain.
Countzero

11

Untuk versi jQuery 1.8+, tampaknya Anda sekarang harus melampirkan fungsi .ajaxComplete pada dokumen, bukan formulir atau tampilan itu sendiri (lihat http://api.jquery.com/ajaxcomplete/ )

Berikut ini berfungsi untuk saya pada D7 dengan Jquery 1.10 dan Views 7.x-3.8, di mana "your_view_id" adalah nama mesin dari view yang diatur di panel pengaturan "Other" view. Ada banyak info lain dalam acara, xhr dan pengaturan untuk menonaktifkan untuk menentukan apakah hasil ajax adalah untuk tampilan yang Anda inginkan, tetapi ini bekerja untuk situasi saya:

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

Tidak ada solusi yang diberikan bekerja untuk saya dengan Drupal 7.24, jQuery 1.11 dan Views 7.x-3.8 .

Apa yang disarankan user1193694 tidak buruk, tetapi objek pengaturan yang saya terima tidak memiliki parameter extraData .

Ketika mem-parsing objek pengaturan saya melihat bahwa properti setting.data berisi ' view_name = ' dan nama mesin tampilan Anda, jadi itulah yang saya filter untuk:

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!');

    }
});

Ganti ' your_views_name ' dengan nama mesin tampilan Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.