Javascript:在函数退出时触发操作

时间:2008-09-25 17:48:36

标签: javascript triggers function-exit

有没有办法监听javascript函数退出?功能完成后可以设置的触发器吗?

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

示例:

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

在解雇unBlockUI之前,是否有办法让doStuff监听ajaxCall完成?实际上,它线性地处理函数,按顺序调用每个对象,然后生成一个单独的线程来完成每个对象。因此,尽管我的AJAX调用可能需要10-15秒才能完成,但由于函数的线性执行,我只是在一瞬间阻止用户。

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

6 个答案:

答案 0 :(得分:4)

但是,您正在完成Ajax例程,您需要的是一个“回调”函数,它将在完成后运行:

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

然后:

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

答案 1 :(得分:1)

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

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

还有another post描述了您正在寻找的内容。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您需要重新设计程序流以与asynchronus流兼容,例如指定在处理响应后要调用的回调函数。看看Prototype或JQuery或者......如何实现这一目标。

答案 4 :(得分:0)

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

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}

答案 5 :(得分:0)

在我看来,您希望用户在从数据库中获取信息时等待。当我从数据库中调用Ajax调用某些信息时,我所做的就是显示一个动画gif,上面写着“得到它......” - 它会不断闪烁,直到检索到信息并显示在网页中。显示信息时,动画gif将关闭/隐藏,焦点将移至显示的新信息。动画gif让用户知道发生了什么事。