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
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:
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
}
});
}
}
Đố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;
}
}
});
Không có giải pháp nào cho tôi làm việc với Drupal 7.24, jQuery 1.11 và Views 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.
Drupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...