एक व्यवहार से 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
क्योंकि यह सबसे अच्छा अभ्यास माना जाता है और अन्य चीजों के बीच नामस्थान टकराव को रोकता है।
काउंट्ज़ेरो

11

JQuery 1.8+ के संस्करणों के लिए, ऐसा लगता है कि अब आपको दस्तावेज़ में .ajaxComplete फ़ंक्शन संलग्न करना होगा, न कि फ़ॉर्म या स्वयं देखें (देखें http://api.jquery.com/ajaxcomplete/ )

निम्नलिखित ने मेरे लिए D7 पर Jquery 1.10 और दृश्य 7.x-3.8 के साथ काम किया, जहां "your_view_id" दृश्य के "अन्य" सेटिंग पैनल में सेट किए गए दृश्य का मशीन नाम है। घटना, xhr और सेटिंग्स में बहुत सी अन्य जानकारी है जो यह निर्धारित करने के लिए महत्वपूर्ण है कि क्या अजाक्स का परिणाम आपके इच्छित दृश्य के लिए है, लेकिन यह मेरी स्थिति के लिए काम करता है:

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

कोई नहीं दिए गए समाधान के साथ मेरे लिए काम किया ड्रुपल 7.24, jQuery 1.11 और दृश्य 7.x-3.8

क्या user1193694 सुझाव बुरा नहीं था, लेकिन सेटिंग्स आपत्ति है कि मैं प्राप्त नहीं था extraData पैरामीटर।

सेटिंग ऑब्जेक्ट को पार्स करते समय मैंने देखा कि settings.data प्रॉपरिटी में ' 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.