2008-09-25 38 views
3

有沒有辦法監聽javascript函數退出?一個函數完成後可以設置的觸發器?Javascript:在函數退出時觸發動作

我試圖使用用戶界面模糊處理技術(BlockUI),而AJAX對象正在從數據庫中檢索數據,但該函數並不一定最後執行,即使您將它放在函數調用的末尾。

例子:

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

有沒有辦法爲doStuff監聽AjaxCall的完成,在發射前unBlockUI?實際上,它按線性處理函數,按順序調用每個對象,然後生成一個單獨的線程以完成每個對象。所以,儘管我的AJAX調用可能需要10-15秒才能完成,但由於函數的線性執行,我僅僅阻止了用戶一秒鐘。

還有一些不太好用的方法......只有當AJAX函數設置的返回值設置爲true時,纔會結束循環,或者具有某種特性。但這似乎不必要的複雜和低效率。

回答

4

但是你完成你的Ajax程序,你需要的是將運行一旦完成一個「回調」功能:

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

然後:

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

你的AJAX調用應該指定一個回調函數。您可以在回調中調用unblockUI。

SAJAX是一個簡單的AJAX庫,對如何進行AJAX調用有更多的幫助。

還有another post描述你在找什麼。

0

你可以做一個同步xhr。這會在整個調用期間導致整個UI塊(無論需要多長時間)。

+0

這種方法的缺點是它會鎖定所有JavaScript活動,直到XHR完成。 – 2008-09-25 17:54:42

0

你需要重新設計你的程序流程與異步流程兼容,就像指定處理響應後調用的回調函數一樣。看看Prototype或者JQuery或者...是如何完成的。

0

答案很簡單,你必須調用unblockUI()當你的Ajax請求返回結果,使用jQuery你可以做這樣的:

function doStuff(){ 

    blockUI(); 

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

      unblockUI(); 
     } 
    }); 
} 
0

它,你希望用戶的聲音,我等待信息從數據庫中獲取。當我從數據庫中進行Ajax調用時,我所做的是顯示一個動畫gif,指出「獲取它」 - 它不斷閃爍,直到信息被檢索並顯示在網頁中。當顯示信息時,動畫gif被關閉/隱藏,焦點移動到正在顯示的新信息。動畫GIF讓用戶知道發生了什麼。