ฟังเหตุการณ์ที่สมบูรณ์ของ 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...
ไคลฟ์

คุณพูดถูก: ลืมสายขณะวาง!
Countzero

2
คุณไม่จำเป็นต้องใช้ $ () เพียงแค่ event.target.id คุณไม่ได้อ้างอิงวัตถุ
Nikola

ทำไมห่อในพฤติกรรม Drupal?
ram4nd

1
เพราะถือว่าเป็นแนวปฏิบัติที่ดีที่สุดและป้องกันไม่ให้ชนเนมสเปซอยู่เหนือสิ่งอื่นใด
Countzero

11

สำหรับรุ่น 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;

        }
    }

});

4

ไม่มีการแก้ปัญหาที่ได้รับทำงานให้ฉันด้วย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 ' ด้วยชื่อเครื่องในมุมมองของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.