2

我正在寻找一个用例中的最佳实践(使用 sencha touch 2 框架):

我有多个 ajax 调用(JSONP 响应),我想在所有这些响应之间按日期过滤提要数据。问题是我不知道什么时候开始过滤。我想知道所有ajax何时完成。

在 jQuery 中,我会使用"promises",例如:

    $.when($.ajax("/page1.php"), $.ajax("/page2.php"), ... $.ajax("/pageN.php")).done(function(a1,  a2){
      // do something
    });

,我在 sencha touch 2 中找不到任何类似的“延迟”,或者您可以建议我另一种检测和加载数据的方法。

在这种情况下,我感谢任何建议帮助或最佳实践。

更新:

是的,我在任何地方都使用煎茶触摸“Ext.Ajax.request”。

我尝试使用类似的东西来捕获所有请求:

    Ext.Ajax.on('beforerequest', this.dosomething, this);
    Ext.Ajax.on('requestcomplete', this.dosomething, this);
    Ext.Ajax.on('requestexception', this.dosomething, this);

但是在这三种情况中的任何一种情况下,都没有被解雇,

PS:当我“午餐”整个应用程序时,我试图在我的主法师“初始化”上执行此事件,在任何情况下它都不会触发任何东西。

我尝试触发事件的时间和方式是否有问题。

谢谢指教!!!

4

2 回答 2

1

假设您正在使用 Ext.Ajax.request,并且想要同时发出所有请求,有几种方法可以做到这一点。当每个请求发出时,您可以增加一个简单的计数器,并在请求回调函数中减少该计数器。在回调函数中还检查计数器是否归零 - 如果是,则所有请求都已完成,您现在可以合并所有数据。比较简单。

另一种选择是利用 Ext.Ajax.requests 对象 - 它包含所有当前尚未完成的请求。只要在这些请求开始/完成之间没有其他请求开始,您就可以在回调函数中检查此对象,如果没有请求,则您可以处理您的数据。

有关 Ext.Ajax 的文档,请参阅此链接

于 2012-12-05T21:59:40.040 回答
1

它并不完美,但这对我来说永远不会失败:

    function removeMaskIfNoAjaxCalls() {
        //clean up mask with timer, because in the Ext.Ajax.request there is one request (current) 
        setTimeout(function() {
            if (Object.keys(Ext.Ajax.requests).length == 0) Ext.Viewport.setMasked(false);
        }, 2000)
    }
于 2015-11-10T10:37:21.360 回答