jQuery加载窗口,同时等待长函数完成
jQuery loading window while waiting for long function to finish
我正在努力使这个解决方案适应我的需求:我如何创建一个"请稍候,正在加载"使用jQuery制作动画?
基本上,提供了一个非常棒的方案来用一个漂亮的加载GUI包装Ajax请求。我正在尝试对我的一个函数执行同样的操作,该函数进行一些计算,然后将一些图形附加到DOM中。
所以我尝试的是:
$("body").addClass("loading");
long_time_taking_function(mainDiv);
$("body").removeClass("loading");
不幸的是,无论是在long_time_taking_function()执行之前还是之后,似乎都会立即添加然后删除该类。然而,我知道添加类是有效的,因为注释掉removeClass()调用会使gif在页面上保持浮动。
你知道我该怎么做吗?如果需要,我可以提供更多关于中间功能的详细信息。
干杯
long_time_taking_function()
包含一个AJAX调用。您只需要将$('body').removeClass('loading')
移动到AJAX调用的回调中。如果你正在使用jQuery(假设你已经标记了jQuery),它会看起来像这样:
$.ajax({
...options...
}).always(function(response) {
$('body').removeClass('loading');
});
编辑:jQueryDeferred对象在这里的回调应该是always()
,因为即使ajax调用失败,加载类也应该被删除。
您可以向函数添加回调,以便在函数完成时调用removeClass语句。
类似这样的东西:
//declare your functions
function long_time_taking_function(mainDiv, callback){
//...your code...
callback();
}
function removeLoadGif(){
$("body").removeClass("loading");
}
//in your current code call this
$("body").addClass("loading");
long_time_taking_function(mainDiv, removeLoadGif);
或者,您可以在函数long_time_taking_function的末尾添加一行$("body").removeClass("loading");
。如果主体当前没有类,它将不会执行任何操作。
你需要做这样的事情。。。
$("body").addClass("loading");
doSomething(url,params)
.complete(function() {
$("body").removeClass("loading");
});
在您的代码中,addClass和removeClass执行得如此之快,就像什么都没发生过一样。
相关文章:
- 如何在jqGrid中使saveRow函数等待editRow函数
- 让 JavaScript 函数等待 Jquery 对话框模态的结果
- 如何在函数完成后使用 jQuery 进行动画处理 - 让第二个函数等待
- 如何使函数等待回调完成
- 让jquery函数等待它'的上一个呼叫已解决
- Javascript/jQuery使函数等待回调后再继续
- 让一个函数等待另一个变量
- 如何强制异步函数等待,直到完成
- 使函数等待/暂停;直到另一个结束
- 需要函数等待事件处理程序完成后再执行下一个函数
- Javascript函数等待另一个函数完成
- Javascript:让函数等待查询完成
- 我需要把'return'casper.then'块,让父函数等待子函数完成执行
- 使函数等待直到元素存在
- 美元.Ajax成功函数等待
- 如何让我的javascript函数等待html元素渲染
- 如何强制函数等待某个事件发生
- javascript/jquery:迭代调用函数;等待之前的通话结束
- 如何让JS函数等待执行
- 如何让NodeJs函数等待