Nghe sự kiện hoàn chỉnh AJAX từ một hành vi


12

Tôi có một mẫu có nút AJAX. Khi tôi nhấp vào nó, nó sẽ cập nhật một loạt các công cụ như mong đợi.

Tôi đã tự hỏi nếu có một cách để tạo ra một người nghe trong hành vi được gọi khi cuộc gọi AJAX hoàn thành?

Cảm ơn

Câu trả lời:


19

Có, có :

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, nhưng đối với Drupal 7 thì nó sẽ làDrupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...
Clive

Bạn nói đúng: quên một dòng trong khi dán!
Countzero

2
bạn không cần $ () chỉ là event.target.id bạn không tham khảo một đối tượng
Nikola

Tại sao bọc nó trong hành vi Drupal?
ram4nd

1
Bởi vì nó được coi là thực tiễn tốt nhất và ngăn ngừa va chạm không gian tên, trong số những thứ khác.
Countzero

11

Đối với các phiên bản của jQuery 1.8+, có vẻ như bây giờ bạn phải đính kèm hàm .ajaxComplete vào tài liệu, chứ không phải biểu mẫu hoặc dạng xem (xem http://api.jquery.com/ajaxcomplete/ )

Phần sau hoạt động với tôi trên D7 với Jquery 1.10 và Lượt xem 7.x-3.8, trong đó "your_view_id" là tên máy của chế độ xem được đặt trong bảng cài đặt "Khác" của chế độ xem. Có rất nhiều thông tin khác trong sự kiện, xhr và cài đặt để tắt để xác định xem kết quả ajax có phù hợp với chế độ xem bạn muốn hay không, nhưng điều này có hiệu quả với tình huống của tôi:

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

Không có giải pháp nào cho tôi làm việc với Drupal 7.24, jQuery 1.11Views 7.x-3.8 .

Những gì user1193694 đề xuất không tệ, nhưng đối tượng cài đặt mà tôi nhận được không có tham số ExtraData .

Khi phân tích cú pháp đối tượng cài đặt, tôi thấy rằng settings.data orthtiy chứa ' view_name = ' và tên máy của chế độ xem của bạn, vì vậy đó là những gì tôi đang lọc:

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

    }
});

Thay thế ' your_view_name ' bằng tên máy của chế độ xem của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.