我有一个 jquery 确认对话框。当用户按下 OK 时,我会执行一个 Ajax 调用,这需要几秒钟。在这个延迟期间,我想在对话框上显示一个 gif 动画,以便用户知道我们正在处理他们的数据。但是,我似乎无法让 gif 出现在对话框中。
html是:
<div id="dlgReleaseConfirmation" title="ConfirmRelease" style="display : none" >
<div id="release-in-progress" style="display:none">
<img src="images/ajax-loader.gif" ></img>
</div>
</div>
js文件中的代码是:
$("#dlgReleaseConfirmation").dialog({
modal: true,
buttons: {
"Release": function () {
$("#release-in-progress").show(); // show the busy div - not working, blocked by dialog?
Release(); // release assays
loadTable(); // refresh datatable
$("#release-in-progress").hide(); // hide the busy div
$(this).dialog("close"); // close this dialog
},
Cancel: function () {
$(this).dialog("close");
}
}
谁能看到我做错了什么?
更新解决方案。
亚历山大让我走上了正确的道路。底线是您必须异步执行 Ajax 调用,以便更新对话框以显示忙碌指示符。但是,如果只是这样做,那么问题就变成了代码将继续并关闭屏幕,而 ajax 调用继续异步,因此不会向用户提供任何反馈。
为了解决这个问题,我添加了对 ajaxStart() 和 ajaxStop() 的调用,以在异步 Ajax 调用进行时隐藏和显示忙碌指示符。这是有效的释放按钮处理程序代码:
"Release": function () {
$(this).ajaxStart(function () {
$("#release-in-progress").show();
});
$(this).ajaxStop(function () {
$("#release-in-progress").hide();
$(this).dialog("close"); // close this dialog
});
Release(); // release assays
loadTable(); // refresh datatable
};