2012-07-30 24 views
0

我试图适应这种解决方案我的需求:How can I create a "Please Wait, Loading..." animation using jQuery?jQuery的装载时限在等待很长的功能来完成

主要是提供一个真正真棒方式来包装一个漂亮的装载GUI Ajax请求。我试图做一个函数,我做了一些计算,然后附加一些图形的DOM。

所以我已经试过是这样的:

$("body").addClass("loading"); 
long_time_taking_function(mainDiv); 
$("body").removeClass("loading"); 

不幸的是,看起来好像类是之前或之后long_time_taking_function相加,然后立即取出,()执行。但是我知道添加类是可行的,因为注释掉removeClass()调用会使gif在页面上浮动。

任何想法,我可以使这项工作?如果需要,我可以提供有关中间函数的更多详细信息。

干杯

+0

是的,'long_time_taking_function'的内容绝对值得赞赏。 – 2012-07-30 23:35:54

+0

它这样做: 1.按特定字段对大JSON对象排序 2.创建一个高图对象(http://www.highcharts.com/)并将其附加到主div元素 就这些了。 – JDS 2012-07-30 23:58:45

+0

你在哪里得到大的JSON对象? – 2012-07-31 00:07:18

回答

3

这是AJAX的一个常见问题:第一个 “A” 代表 “异步”。这意味着AJAX调用会立即返回,并在后台运行或多或少。 long_time_taking_function()包含一个AJAX调用。您只需将该$('body').removeClass('loading')移入AJAX调用的回调。如果你正在使用jQuery(假设你是因为你标记),它会是这个样子:

$.ajax({ 
    ...options... 
}).always(function(response) { 
    $('body').removeClass('loading'); 
}); 

编辑:这里的jQuery的Deferred对象的回调应该是always(),作为加载类应该甚至删除如果ajax调用失败。

+0

我不认为我使用AJAX。因此,我为什么提出这个话题。我所有的功能都是通过添加一些JavaScript生成的图像来更新DOM,那么这是否算作AJAX? – JDS 2012-07-30 23:51:46

0

你需要做这样的事情......

$("body").addClass("loading"); 
doSomething(url,params) 
    .complete(function() { 
    $("body").removeClass("loading"); 
    }); 

在你的代码,addClass与removeClass执行这么快就好像什么事也没发生过。

1

你可以添加一个回调到你的函数,这样当它完成时,它会调用你的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); 

或者你可以只添加一行$("body").removeClass("loading");你的函数long_time_taking_function结束。如果身体目前没有班级,那么它什么都不会做。