我需要在完成所有Ajax请求后在面板上执行一些操作,为此我添加了处理程序:
Ext.Ajax.on('requestcomplete', function(conn, response, options) {
if (!Ext.Ajax.isLoading()) {
// do action
}
});
但我发现,如果Ext.Ajax.request
方法执行请求,Ext.Ajax.isLoading()返回false
,无论此请求处于哪种状态。
更新
Ext.Ajax.request({
url: 'someUrl',
timeout: 50000,
scope: this,
success: function(response, options) {
//some action
},
params: {
//some params
},
callback: function() {
//some action
}
});
有人知道如何修复它吗?或者可能存在一些其他方式来定义所有请求都已完成?
答案 0 :(得分: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