Прослухайте повну подію AJAX з поведінки


12

У мене форма, яка має кнопку AJAX. Коли я натискаю його, він оновлює купу речей, як очікувалося, що добре.

Мені було цікаво, чи є спосіб створити слухача в поведінці, який викликається, коли AJAX-дзвінок завершено?

Дякую

Відповіді:


19

Так, є:

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, але для Drupal 7 це було бDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Клайв

Ви праві: забули рядок під час вставки!
Графжеро

2
вам не потрібен цей $ () просто event.target.id ви не посилаєтесь на об'єкт
Микола

Навіщо вплітати це в поведінку Друпала?
ram4nd

1
Тому що це вважається найкращою практикою і, крім іншого, запобігає зіткненням просторів імен.
Countzero

11

Для версій jQuery 1.8+, схоже, тепер ви повинні приєднати до документа функцію .ajaxComplete, а не форму або сам перегляд (див. Http://api.jquery.com/ajaxcomplete/ )

Наступне працювало для мене на D7 з Jquery 1.10 та Views 7.x-3.8, де "your_view_id" - це ім'я машини перегляду, встановленого на панелі налаштувань "Інше". Існує багато іншої інформації про події, xhr та налаштування для вимкнення, щоб визначити, чи результат ajax потрібний для перегляду, який ви хочете, але це працювало для моєї ситуації:

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

Жодне із наведених рішень не працювало для мене з Drupal 7.24, jQuery 1.11 та Views 7.x-3.8 .

Те, що запропонував user1193694, було непогано, але отриманий мною об’єкт налаштувань не мав параметра extraData .

Під час розбору об'єкта налаштування я побачив, що settings.data propertiy містить ' view_name = ' та ім’я машини вашого перегляду, тож для чого я фільтрую:

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

    }
});

Замініть " your_views_name " на ім'я машини вашого перегляду.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.