2013-11-15 38 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

相关问题