ฉันมีแบบฟอร์มที่มีปุ่ม AJAX เมื่อฉันคลิกมันจะอัปเดตสิ่งต่าง ๆ ตามที่คาดหวังซึ่งเป็นเรื่องปกติ
ฉันสงสัยว่ามีวิธีการสร้างฟังในพฤติกรรมที่ได้รับเรียกเมื่อโทร AJAX เสร็จสมบูรณ์หรือไม่
ขอบคุณ
ฉันมีแบบฟอร์มที่มีปุ่ม AJAX เมื่อฉันคลิกมันจะอัปเดตสิ่งต่าง ๆ ตามที่คาดหวังซึ่งเป็นเรื่องปกติ
ฉันสงสัยว่ามีวิธีการสร้างฟังในพฤติกรรมที่ได้รับเรียกเมื่อโทร AJAX เสร็จสมบูรณ์หรือไม่
ขอบคุณ
คำตอบ:
ใช่นั่นคือ:
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
}
});
}
}
สำหรับรุ่น jQuery 1.8+ ดูเหมือนว่าตอนนี้คุณต้องแนบฟังก์ชัน. jaxComplete กับเอกสารไม่ใช่แบบฟอร์มหรือมุมมองตัวเอง (ดู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;
}
}
});
ไม่มีการแก้ปัญหาที่ได้รับทำงานให้ฉันด้วยDrupal 7.24, 1.11 jQueryและมุมมอง 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 ' ด้วยชื่อเครื่องในมุมมองของคุณ
Drupal.behaviors.YourBehaviour = { attach: function() { $('#yourform').ajaxComplete...