未完成所有请求时,Ext.Ajax.isLoading 返回 false

Posted

技术标签:

【中文标题】未完成所有请求时,Ext.Ajax.isLoading 返回 false【英文标题】:Ext.Ajax.isLoading return false when not all requests were completed 【发布时间】:2013-11-15 09:55:16 【问题描述】:

在所有 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            
    
);

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

【问题讨论】:

您的Ext.Ajax.request 和其他代码是什么样的? @AntoJurkovic 这是简单的请求,没有什么不寻常的。添加示例。 【参考方案1】:

不幸的是,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

【讨论】:

以上是关于未完成所有请求时,Ext.Ajax.isLoading 返回 false的主要内容,如果未能解决你的问题,请参考以下文章

input输入中文未完成时触发change事件

已完成 401 未授权请求被重定向到不允许需要预检的跨域请求

NodeJS HTTP请求未按顺序执行

prefetches

僵尸.js 触发的 AJAX 请求未完成

第二次调用函数时未调用 Swift 完成处理程序