Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sencha Touch 2,阿贾克斯承诺_Javascript_Ajax_Sencha Touch 2 - Fatal编程技术网

Javascript Sencha Touch 2,阿贾克斯承诺

Javascript Sencha Touch 2,阿贾克斯承诺,javascript,ajax,sencha-touch-2,Javascript,Ajax,Sencha Touch 2,我正在一个用例中寻找最佳实践(使用sencha touch 2框架): 我有多个ajax调用(JSONP响应),我想在所有这些响应之间按日期过滤提要数据。问题是我不知道什么时候开始过滤。我想知道所有ajax何时完成 在jQuery中,我会使用,“承诺”,例如: $.when($.ajax("/page1.php"), $.ajax("/page2.php"), ... $.ajax("/pageN.php")).done(function(a1, a2){ // do so

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

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

在jQuery中,我会使用,“承诺”,例如:

    $.when($.ajax("/page1.php"), $.ajax("/page2.php"), ... $.ajax("/pageN.php")).done(function(a1,  a2){
      // do something
    });
,, 我在sencha touch 2中找不到任何类似的“延迟”,或者您可以建议我使用另一种方法来检测并加载数据

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

更新:

是的,我在任何地方都使用senchatouch“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:我试图在我的主魔法师“初始化”时执行这个事件,当我“午餐”整个应用程序时,在任何情况下它都不会触发任何东西

这是不是我在什么时候以及如何尝试发起这项活动时出了问题


谢谢你的建议

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

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


关于Ext.Ajax的文档。

它并不完美,但这对我来说从未失败过:

    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)
    }

你看过$.when()和$.done()后面的代码了吗?这是用于jquery的,一切都很好,但是我需要一些类似的东西,可以用Javascript吗?所以我只是想知道你是否看了一下这些jQuery函数背后的实际执行代码。这可能是可行的,但这就是问题所在,不确定这是否是包含另一个框架的最佳实践。另外,我很可能需要重新创建Ext.Ajax到jquery对象Ajax,对此不确定,但到目前为止,我在项目中不需要jquery,除了这个。但我同意这也是一个解决方案。我也想到了:),谢谢,我现在正在使用第一种方法,我不确定这是否是最佳实践,我也有点喜欢第二种方法,实际上我已经在尝试使用类似的方法,我将更新我的问题以显示代码。谢谢