3

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

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

例子:

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

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

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

4

6 回答 6

4

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

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

然后:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}
于 2008-09-25T17:53:22.260 回答
1

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

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

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

于 2008-09-25T17:51:14.137 回答
0

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

于 2008-09-25T17:51:23.090 回答
0

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

于 2008-09-25T17:55:52.097 回答
0

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

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}
于 2008-09-25T23:58:24.550 回答
0

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

于 2008-09-26T01:05:01.677 回答