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

时间:2020-03-06 14:44:13  来源:igfitidea点击:

有没有办法监听JavaScript函数退出?功能完成后是否可以设置触发器?

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

例子:

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

在触发unBlockUI之前,doStuff有没有办法监听ajaxCall?照原样,它会线性处理函数,依次调用每个对象,然后生成一个单独的线程来完成每个对象。因此,尽管我的AJAX调用可能需要10到15秒才能完成,但是由于该函数的线性执行,我只是在瞬间中断了用户。

解决这个问题的方法不太好...仅当AJAX函数设置的返回值设置为true或者类似性质时,才使循环结束。但这似乎不必要地复杂且效率低下。

解决方案

AJAX调用应指定一个回调函数。我们可以从回调中调用unblockUI。

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

还有另一篇文章描述了我们要寻找的内容。

我们可以执行同步xhr。这将导致整个UI块在调用期间(无论可能花费多长时间)。

但是,如果我们要完成Ajax例程,则需要一个"回调"函数,该函数将在完成后立即运行:

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

然后:

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

我们需要重新设计程序流以使其与异步流兼容,例如指定在处理响应后要调用的回调函数。查看Prototype或者JQuery或者...如何完成此任务。

答案很简单,当ajax请求返回结果时,我们必须调用unblockUI(),使用jQuery我们可以像这样进行操作:

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}

在我看来,我们希望用户在从数据库中获取信息时等待。当我从数据库进行Ajax调用以获取某些信息时,我要做的是显示一个动画的gif,上面显示" geting it ...",它不断闪烁,直到检索到该信息并将其显示在网页中。显示信息时,将关闭/隐藏动画gif,并将焦点移到要显示的新信息上。动画的gif可以让用户知道正在发生的事情。