Điểm:0

Cần trợ giúp với các cuộc gọi AJAX trong Drupal.behaviors

lá cờ in

Tôi đang gặp một số vấn đề khiến đoạn mã sau hoạt động chính xác:

(hàm($) {
'Sử dụng nghiêm ngặt';
Drupal.behaviors.mybehavior = {
    đính kèm: chức năng (bối cảnh, cài đặt) {

        // Nhấp vào hình ảnh giữ chỗ, điều này sẽ mở một biểu mẫu và sau đó
        // thay thế hình ảnh bằng tài nguyên video (nội dung được kiểm soát)
        $(document).once('abc').on('click', '.image_class', function() {
            var fid = 123 // Nhận ID thực thể biểu mẫu từ thuộc tính dữ liệu
            var vid = 456 // Nhận ID thực thể tài nguyên từ thuộc tính dữ liệu

            // Cuộc gọi AJAX này tải một biểu mẫu và trả về một OpenModalDialogCommand
            // chứa biểu mẫu.
            Drupal.ajax({
                url: '/load/a/form/' + fid
            }).execute().done(function() {
                var id = // Nhận ID biểu mẫu Marketo
                // Tải biểu mẫu từ Marketo
                MktoForms2.loadForm('cname', '123-123-123', fid, function(form) {
                    form.onSuccess(function(e) {
                        form.getFormElem().hide();

                        // Nếu biểu mẫu được gửi thành công, hãy tải video
                        // tài nguyên và đặt nó trên trang bằng HTMLCommand
                        Drupal.ajax({
                            url: '/load/a/video/' + vid
                        }).execute().done(function() {
                            // Công việc dọn dẹp CSS/CSS cơ bản ở đây
                        });
                        trả về sai;
                    });
                });
            })
        });
    }
}
})(jQuery);

Toàn bộ quá trình hoạt động chính xác nhưng nó lặp lại các cuộc gọi AJAX trước đó ở mỗi bước.

Chẳng hạn, khi tôi nhấp vào bộ chọn ban đầu .image_class cuộc gọi AJAX tải biểu mẫu hoạt động tốt.

Sau khi tôi hoàn thành biểu mẫu thành công, lệnh gọi AJAX thứ hai sẽ kích hoạt nhưng điều này dường như cũng kích hoạt lại lệnh gọi AJAX đầu tiên, đưa biểu mẫu vừa hoàn thành và xóa trở lại trang, mở lại hộp thoại một cách hiệu quả.

Mọi thứ đang kích hoạt chính xác, tôi chỉ không thể tìm ra cách để quy trình này hoạt động mà không kích hoạt lại tất cả các cuộc gọi AJAX trước đó.

Cảm ơn!

leymannx avatar
lá cờ ne
Các tham số bị thiếu từ phần đầu `(function ($, Drupal, once) {` và phần cuối `})(jQuery, Drupal, once);`. Ngoài ra, hãy đảm bảo rằng bạn thêm chúng dưới dạng phần phụ thuộc trong định nghĩa thư viện của mình. Làm cho nó trông giống các mẫu trong tài liệu hơn: https://www.drupal.org/docs/drupal-apis/javascript-api/javascript-api-overview

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.