如何使用引导框模式对话框显示处理 spinner/gif

How to display processing spinner/gif with bootbox modal dialog

我正在使用模式弹出窗口的启动框并且能够显示模式弹出窗口。当用户单击 Generate Returns 按钮时,我正在使用回调函数并尝试显示微调器。我正在使用 ajax 来保存来自模态弹出窗口的数据。在这里,我无法向用户显示微调器图标,某些事情正在处理中。这是我的代码

bootbox.dialog({
    message: data,
    size:"large",
    title: "<font color=red>Product Returns Log</font>",
    buttons: {
        success: {
            label: "Generate Returns",
            className: "btn-success",
             callback: function() {                         
             var input_data = jQuery("#returns_dialog_form").serialize();
              var textarea_val = jQuery("#retunrs_log").val();
                if(textarea_val == '') {
                    bootbox.alert("<font color=red>Please enter the log details</font>");
                    jQuery("#retunrs_log").focus();
                    return false;
                }
                else {
                      savelog_generate_returns(ids_string,textarea_val);
                    }
              } 
        },
        cancelbutton: {
            label: "Cancel",
            className: "btn-warning"
            
        }

    }
});   

在这个函数 savelog_generate_returns() 中,我试图显示微调器。但是在处理完成之后就显示出来了

function savelog_generate_returns(order_ids,log_detail) {
bootbox.dialog({
title: 'A custom dialog with init',
    message: '<p><i class="fa fa-spin fa-spinner"></i> Loading...</p>'
});
    jQuery.ajax({
    async: false,
    type: 'POST',
    data: {order_ids:order_ids,log_detail:log_detail},
    url: "<?php echo BASE_URL;?>generate_returns/test",
    success: function(valid_result)
        {
            if(valid_result == 1)
            {
                returns_type_Table.draw();  
            }
        }
   });
}

但是这部分是在函数执行后显示的

`bootbox.dialog({
    title: 'A custom dialog with init',
        message: '<p><i class="fa fa-spin fa-spinner"></i> Loading...</p>'
    });`

我想在用户单击 Generate Returns 按钮时显示微调器图标。请指导我哪里做错了?任何帮助将不胜感激..

假设您使用的是最新版本的 Bootbox,您需要利用 onShowonShown 选项。像这样:

function savelog_generate_returns(order_ids,log_detail) {
    bootbox.dialog({
        title: 'A custom dialog with init',
        message: '<p><i class="fa fa-spin fa-spinner"></i> Loading...</p>',
        onShown: function() {
            jQuery.ajax({
                async: false,
                type: 'POST',
                data: { order_ids : order_ids, log_detail : log_detail },
                url: "<?php echo BASE_URL;?>generate_returns/test",
                success: function(valid_result) {
                    if(valid_result == 1) {
                        returns_type_Table.draw();  
                    }
                }
            });
        }
    });
}

这将延迟 AJAX 调用,直到对话框完成 show.bs.modalshown.bs.modal 事件(取决于您使用的处理程序)。否则,您基本上是在争先恐后地查看对话框是否在 AJAX 调用完成之前显示。

如果您使用的是旧版本的 Bootbox,您可以通过使用 bootbox.init() 函数来完成或多或少相同的事情:

function savelog_generate_returns(order_ids,log_detail) {
    bootbox.dialog({
        title: 'A custom dialog with init',
        message: '<p><i class="fa fa-spin fa-spinner"></i> Loading...</p>'
    })
    .init(function() {
        jQuery.ajax({
            async: false,
            type: 'POST',
            data: { order_ids : order_ids, log_detail : log_detail },
            url: "<?php echo BASE_URL;?>generate_returns/test",
            success: function(valid_result) {
                if(valid_result == 1) {
                    returns_type_Table.draw();  
                }
            }
        });
    });
}

附带说明一下,在您的 AJAX 选项中使用 async: false 通常不是一个好主意,除非您有 确实 充分且站得住脚的理由设置那个。