0

在所有 Ajax 请求完成后,我需要在面板上执行一些操作,为此我添加了处理程序:

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

但是我发现,如果通过Ext.Ajax.requestExt.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            
    }
});

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

4

1 回答 1

0

不幸的是,该isLoading()功能仅告诉您请求是否仍在等待答复。所以 false 意味着它还没有开始或者已经完成。

如果您知道要在面板中发送多少个请求,则可以使用本机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
于 2013-11-15T15:42:28.787 回答