0

すべての 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            
    }
});

誰かがそれを修正する方法を知っていますか? または、すべてのリクエストが完了したことを定義するための他の方法が存在する可能性はありますか?

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 に答える