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

Paul Sheldrake
sumber

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
    }
  });
 }
}
Countzero
sumber
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;

        }
    }

});
pengguna1193694
sumber
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.

Larzan
sumber