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

Javascript: Trigger action on function exit

本文关键字:操作 退出 函数 Javascript      更新时间:2023-09-26

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

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

例:

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

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

有不太优雅的方法可以解决这个问题...仅当 AJAX 函数设置的返回值设置为 true 或类似性质的内容时,才结束循环。但这似乎过于复杂和低效。

无论你在完成你的Ajax例程,你需要的是一个"回调"函数,一旦完成,它就会运行:

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

然后:

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

AJAX 调用应指定回调函数。 您可以从回调中调用取消阻止的 UI。

SAJAX 是一个简单的 AJAX 库,其中包含有关如何执行 AJAX 调用的更多帮助。

还有另一篇文章描述了您正在寻找的内容。

您可以执行同步 xhr。 这将导致整个 UI 在调用期间阻塞(无论可能需要多长时间)。

您需要重新设计程序流以与异步流兼容,例如指定在处理响应后要调用的回调函数。看看原型或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,上面写着"得到它......"——它会不断闪烁,直到信息被检索并显示在网页中。显示信息时,动画 gif 被关闭/隐藏,焦点将移动到正在显示的新信息。动画 gif 让用户知道正在发生某些事情。