jquery - 如何使用引导箱模式对话框显示处理微调器/gif
问题描述
我正在使用启动框进行模式弹出并能够显示模式弹出。当用户单击Generate Returns
按钮时,我正在使用回调函数并尝试显示微调器。我正在使用 ajax 从 modalpopup 保存数据。在这里,我无法向用户显示微调器图标,某些事情正在处理中。这是我的代码
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,您可以使用一个onShow
或onShown
选项。像这样的东西:
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.modal
orshown.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();
}
}
});
});
}
作为旁注,async: false
在您的 AJAX 选项中使用通常是一个坏主意,除非您有一个非常好的和合理的理由来设置它。
推荐阅读
- java - 当事件太多时如何构造代码android
- reactjs - React 和 Firestore - 检索用户个人资料图片 URL 的问题
- firebase - FirebaseError:删除 Google 服务帐户后权限缺失或权限不足
- azure - Azure vnet 跨订阅对等互连
- performance - 如何优化逻辑应用程序的不良性能
- sql - Hive SQL - 使用引号加载值,删除引号
- awk - 使用 awk,在文本文件的列中提取两个字符串之间的第一个和最后一个数字,然后区分它们?
- reactjs - 如何使 initialParams 更新
- html - 使用外部 CSS 文件时如何使 HTML 表格响应电子邮件模板是不可能的
- kiwi-tcms - 有没有办法显示完成程度?