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!