我有一个 jquery ui 对话框,它加载了来自服务器的部分视图的 ajax。该对话框最初以 dialog-ajax-loader 的形式打开,当调用返回时,它会动画/增长到内容的大小。
问题是当对话框内容被缓存或 ajax 调用太快时,我会得到一个不受欢迎的效果,即内容基本上立即加载到 ajax-loader 大小的对话框中,而 ajax 加载器实际上是不可见的,即使是片刻. 不用说,我付出了所有努力让这看起来很棒,我不能满足于此。我需要 ajax 加载器至少显示 1 秒,如果 ajax 调用实际上需要更多时间,则需要更多时间。
我已经在网上搜索了很长时间,试图找到一个不错的 sleep() 函数,但总是有一个禁忌。想在这里发帖以获得一些想法,这是最好的方法。
实际的代码当然要复杂得多,但在概念上是这样的:
var mydialog = $("<div></div>").dialog({...Ajax loader settings...});
var minimumTimeMet = false;
setTimeout(function( ){ minimumTimeMet = true; }, 1000);
mydialog.dialog("open"); //Open ajax loader
$.ajax({
cache: false, //This helps but not always, sometimes the request is just too fast
....
success: function(htmlContentResponse){
while(!minimumTimeMet){
//sleep here! However, thread cannot be
//blocked because the function set in setTimeout
//above must executed to change minimumTimeMet = true
//and break out of this loop.
}
mydialog.html(htmlContentResponse);
mydialog.animate({...Animate into new dialog settings ...});
}
});