Puncte:0

Aveți nevoie de ajutor cu apelurile AJAX din Drupal.behaviors

drapel in

Am câteva probleme pentru ca următorul cod să funcționeze corect:

(funcție($) {
„utilizați strict”;
Drupal.behaviors.mybehavior = {
    atașați: funcție(context, setări) {

        // Faceți clic pe o imagine de substituent, aceasta ar trebui să deschidă un formular și apoi
        // înlocuiți imaginea cu o resursă video (conținut blocat)
        $(document).once('abc').on('click', '.image_class', function() {
            var fid = 123 // Obține ID-ul entității formular din atributul de date
            var vid = 456 // Obține ID-ul entității resursă din atributul de date

            // Acest apel AJAX încarcă un formular și returnează un OpenModalDialogCommand
            // conţinând formularul.
            Drupal.ajax({
                url: '/load/a/form/' + fid
            }).execute().done(funcție() {
                var id = // Obțineți ID-ul formularului Marketo
                // Încărcați formularul de la Marketo
                MktoForms2.loadForm('cname', '123-123-123', fid, function(form) {
                    form.onSuccess(funcție(e) {
                        form.getFormElem().hide();

                        // Dacă formularul a fost trimis cu succes, încărcați videoclipul
                        // resursă și plasați-o pe pagină cu un HTMLCommand
                        Drupal.ajax({
                            url: „/load/a/video/” + vid
                        }).execute().done(funcție() {
                            // CSS de bază/curățare funcționează aici
                        });
                        returnează fals;
                    });
                });
            })
        });
    }
}
})(jQuery);

Întregul proces funcționează corect, dar dublează apelurile AJAX anterioare la fiecare pas.

De exemplu, când dau clic pe selectorul inițial .clasa_imagine apelul AJAX care încarcă un formular funcționează excelent.

Odată ce completez formularul cu succes, al doilea apel AJAX se declanșează, dar acest lucru pare să declanșeze și primul apel AJAX, punând efectiv formularul care tocmai a fost completat și eliminat înapoi pe pagină, redeschizând dialogul.

Totul se declanșează corect, pur și simplu nu îmi pot da seama cum să fac acest proces să funcționeze fără a re-declanșa toate apelurile AJAX anterioare.

Mulțumiri!

leymannx avatar
drapel ne
Parametrii lipsesc de la început `(funcția ($, Drupal, o dată) {` și la sfârșit `})(jQuery, Drupal, o dată);`. De asemenea, asigurați-vă că le adăugați ca dependențe în definiția bibliotecii. Faceți-o să semene mai mult cu exemplele din documente: https://www.drupal.org/docs/drupal-apis/javascript-api/javascript-api-overview

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.