【问题标题】:Javascript: Trigger action on function exitJavascript:函数退出时触发操作
【发布时间】:2008-09-25 17:48:35
【问题描述】:

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

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

例子:

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

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

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

【问题讨论】:

    标签: javascript triggers function-exit


    【解决方案1】:

    无论您如何完成 Ajax 例程,您都需要一个“回调”函数,该函数将在完成后运行:

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

    然后:

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

    【讨论】:

      【解决方案2】:

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

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

      还有another post 描述了您要查找的内容。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这种方法的缺点是它会锁定所有 JavaScript 活动,直到 XHR 完成。
        • 在大多数浏览器中,这也会在通话期间阻止 UI。这是一件坏事。
        【解决方案4】:

        您需要重新设计您的程序流程以与异步流程兼容,例如指定处理响应后要调用的回调函数。看看 Prototype 或 JQuery 或 ... 是如何做到这一点的。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-08-23
              • 2012-06-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多