2016-02-11 69 views
0

是否可以使用$。当异步:JQuery/Ajax:如何将几个ajaxes合并为一个异步ajax和响应?

init: function() { 
    console.log('begin'); 
    $.when(
     {async: true}, 
     this.ajax1(), 
     this.ajax2(), 
     this.ajax3() 
    ).done(function() { 
     console.log('success'); 
    }, function() { 
     console.log('error'); 
    }); 
    console.log('end'); 
} 

每个ajax1,ajax2或ajax3可以是同步或异步

对于没有它不工作然后我希望,我希望看到的在控制台输出下一顺序

开始

次成功(或错误)

但实际输出始终是:

开始

成功(或错误)

+0

'$ .when'在使用这种方式时是异步的,总是不需要设置任何东西。但是,你应该**从不**使用同步Ajax。 – adeneo

+0

当ajax1完成时,你不能调用ajax2。例如, $ ajax(){.....,complete:function(){ajax2 call} – user3509208

+0

如果第一个参数不是延迟的,它可能与'jQuery'立即调用done回调有关。 – MinusFour

回答

0

你永远不应该使用同步AJAX。 - adeneo

问题是我的一些ajaxes是同步的,因为它们的结果是依赖的。

当ajax1完成时不能调用ajax2。例如, $阿贾克斯(){ .....,完整:函数(){ajax2通话} - user3509208

所以我让他们异步并提出内部ajaxes上完成了那些谁的数据依赖:

init: function() { 
    console.log('begin'); 
    $.when(
     {async: true}, 
     this.ajax1(), 
     this.ajax2() 
    ).done(function() { 
     console.log('success'); 
    }, function() { 
     console.log('error'); 
    }); 
    console.log('end'); 
} 


ajax1: function() { 
    return $.ajax('url', { 
    async: true, 
    success: ... , 
    error: ...) 
    ); 
} 

ajax2: function() { 
    return $.ajax('url', { 
    async: true, 
    success: ajax3(), 
    error: ...) 
    ); 
} 

ajax3: function() { 
    return $.ajax('url', { 
    async: true, 
    success: ... , 
    error: ...) 
    ); 
} 

现在它工作!