2008-09-25 39 views
3

有没有办法监听javascript函数退出?一个函数完成后可以设置的触发器?Javascript:在函数退出时触发动作

我试图使用用户界面模糊处理技术(BlockUI),而AJAX对象正在从数据库中检索数据,但该函数并不一定最后执行,即使您将它放在函数调用的末尾。

例子:

function doStuff() { 
    blockUI(); 
    ajaxCall(); 
    unblockUI(); 
}; 

有没有办法为doStuff监听AjaxCall的完成,在发射前unBlockUI?实际上,它按线性处理函数,按顺序调用每个对象,然后生成一个单独的线程以完成每个对象。所以,尽管我的AJAX调用可能需要10-15秒才能完成,但由于函数的线性执行,我仅仅阻止了用户一秒钟。

还有一些不太好用的方法......只有当AJAX函数设置的返回值设置为true时,才会结束循环,或者具有某种特性。但这似乎不必要的复杂和低效率。

回答

4

但是你完成你的Ajax程序,你需要的是将运行一旦完成一个“回调”功能:

function ajaxCall(callback){ 
    //do ajax stuff... 
    callback(); 
} 

然后:

function doStuff(){ 
    blockUI(); 
    ajaxCall(unblockUI); 
} 
1

你的AJAX调用应该指定一个回调函数。您可以在回调中调用unblockUI。

SAJAX是一个简单的AJAX库,对如何进行AJAX调用有更多的帮助。

还有another post描述你在找什么。

0

你可以做一个同步xhr。这会在整个调用期间导致整个UI块(无论需要多长时间)。

+0

这种方法的缺点是它会锁定所有JavaScript活动,直到XHR完成。 – 2008-09-25 17:54:42

0

你需要重新设计你的程序流程与异步流程兼容,就像指定处理响应后调用的回调函数一样。看看Prototype或者JQuery或者...是如何完成的。

0

答案很简单,你必须调用unblockUI()当你的Ajax请求返回结果,使用jQuery你可以做这样的:

function doStuff(){ 

    blockUI(); 

    jQuery.ajax({ 
     url: "example.com", 
     type: "POST",   //you can use GET or POST 
     success: function(){ 

      unblockUI(); 
     } 
    }); 
} 
0

它,你希望用户的声音,我等待信息从数据库中获取。当我从数据库中进行Ajax调用时,我所做的是显示一个动画gif,指出“获取它” - 它不断闪烁,直到信息被检索并显示在网页中。当显示信息时,动画gif被关闭/隐藏,焦点移动到正在显示的新信息。动画GIF让用户知道发生了什么。