gpt4 book ai didi

javascript - 对话框ajax加载动画效果-需要循环延迟、 sleep

转载 作者:行者123 更新时间:2023-12-02 19:03:50 26 4
gpt4 key购买 nike

我有一个 jquery ui 对话框,它是 ajax 加载的,其中包含来自服务器的部分 View 。该对话框最初作为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 ...});
}

});

最佳答案

尝试在触发请求之前添加一个标志,同时将 Timeout 设置为 1000 毫秒并在回调中清除该标志

var flag = false;
var response;

setTimeout(function () {
flag = true;
if (response) {
ajaxCallback(response);
}
}, 1000);

$.ajax({
cache: false,
success: function(htmlContentResponse){
response = htmlContentResponse;
if (flag) {
ajaxCallback(response);
}
}
});

function ajaxCallback(htmlContentResponse) {
// Do something
}

这样,如果ajax调用提前完成,它将等待直到执行setTimeout回调。

关于javascript - 对话框ajax加载动画效果-需要循环延迟、 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14515158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com