当并非所有请求都已完成时,Ext.Ajax.isLoading返回false

时间:2013-11-15 09:55:17

标签: javascript ajax extjs extjs4.1

我需要在完成所有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            
    }
});

有人知道如何修复它吗?或者可能存在一些其他方式来定义所有请求都已完成?

1 个答案:

答案 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