2012-02-03 52 views
2

在我的應用程序中,我需要同時執行多個Ajax請求,但每個請求都需要基於響應大小的不同時間。爲了避免AJAX請求期間進一步的操作,我想用Ext.LoadMask在每個AJAX調用,就像這樣:ExtJS loadMask:管理多個Ajax調用中的多個loadMask

for(var i=0; i<ajaxCount; i++) { 
    var loadMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading " + ajaxName[i]}); 
    Ext.Ajax.request({ 
     success: function() { 
      loadMask.hide(); 
     }, 
     failure: function() { 
      loadMask.hide(); 
     } 
    } 
} 

然而,我發現隱藏()將隱藏所有loadMaskes的記憶。我想要做的只是在這個ajax請求中隱藏一個,這樣在所有請求結束之前總是有一個掩碼。

有沒有另外一種方法來實現呢?

謝謝!

回答

6

爲什麼不對所有請求使用同一個掩碼,並在返回所有請求後將其刪除?

var requestCounter = 0; 
function hideMask(){ 
    if (requestCounter > 1){ 
     requestCounter--; 
    } else { 
     loadMask.hide(); 
    } 
} 
if (ajaxCount > 0){ 
    var loadMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading"}); 
} 

for(var i=0; i<ajaxCount; i++) {  
    requestCounter++; 
    Ext.Ajax.request({ 
     success: hideMask, 
     failure: hideMask 
    } 
} 
+0

好主意。只有在hideMask()中,一個小小的改變需要做:添加一個檢查,如果是的話requestCouter === 0然後隱藏。在你的函數中,儘管requestCounter--和value變成了0,它不會隱藏... – Simon 2012-02-03 23:25:41

+0

@Simon好抓。您也可以將條件更改爲(> 1);) – Li0liQ 2012-02-04 06:26:47