2013-11-15 37 views
0

我需要做面板上的一些動作的所有Ajax請求結束後,併爲此我添加處理程序:Ext.Ajax.isLoading返回false時,不是所有的請求都完成

Ext.Ajax.on('requestcomplete', function(conn, response, options) { 
    if (!Ext.Ajax.isLoading()) { 
     // do action 
    } 
}); 

但我發現,在情況當通過Ext.Ajax.request方法執行請求時,Ext.Ajax.isLoading()返回false而不管處於何種狀態請求。

UPDATE

Ext.Ajax.request({ 
    url: 'someUrl', 
    timeout: 50000, 
    scope: this, 
    success: function(response, options) { 
     //some action 
    }, 
    params: { 
     //some params 
    }, 
    callback: function() { 
     //some action    
    } 
}); 

難道有人知道如何解決它?或者可能存在一些其他方式來定義所有請求已完成?

+0

你'Ext.Ajax.request'和其他代碼是什麼樣子? –

+0

@AntoJurkovic這是簡單的請求,沒有什麼不尋常的。新增示例。 – Vartlok

回答

0

不幸的是isLoading()函數只會告訴你請求是否還在等待答案。所以錯誤意味着它還沒有開始,或者它已經完成。

如果您知道您要在面板中發送多少個請求,則可以使用本機setInterval()函數進行解決。

它可能看起來像這樣:

var itemsLoaded = 0, 
    loadFailed = false, 
    pID; 

for(var i = 0; i < amount; i++) { 
    Ext.Ajax.request({ 
    url: 'someUrl', 
    timeout: 50000, 
    scope: this, 
    success: function(response, options) { 
     itemsLoaded++; 
     //other actions 
    }, 
    failure: function() { 
     loadFailed = true; 
    }, 
    params: { 
     //some params 
    }, 
    callback: function() { 
     //some action    
    } 
    }); 
} 

pID = setInterVal(function() { 
    if(itemsLoaded == amount) { 
    clearInterval(pID); 
    //place here the actions you want to do when all items are loaded 
    } else if(loadFailed) { 
    clearInterval(pID); 
    } 
}, 100); //milliseconds you want to retry the check 
+0

我想這只是一個可接受的解決方案。 – Vartlok

相關問題