jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery ajax延迟回调命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在延迟对象的回调之前,我无法在每个ajax请求上执行done / fail / always回调.

我遇到的问题是我的一些ajax请求可能会失败,但我需要执行相同的代码,无论是失败还是没有失败.

很难准确解释,所以我做了这个小提琴,以帮助显示我遇到的问题.
http://jsfiddle.net/zZsxV/

var a1 = $.Deferred();
var a2 = $.Deferred();
var a3 = $.Deferred();

a1.done(function() {
    $('body').append('a1 done<br />');     
}).fail(function() {
    $('body').append('a1 fail<br />');     
}).always(function() {
    $('body').append('a1 always<br />');     
});

a2.done(function() {
    $('body').append('a2 done<br />');     
}).fail(function() {
    $('body').append('a2 fail<br />');     
}).always(function() {
    $('body').append('a2 always<br />');     
});

a3.done(function() {
    $('body').append('a3 done<br />');     
}).fail(function() {
    $('body').append('a3 fail<br />');     
}).always(function() {
    $('body').append('a3 always<br />');     
});

var def = $.when(a1,a2,a3);
def.always(function() {
    $('body').append('defer always <-- Should be after all<br />'); 
});

setTimeout(function() {
    a1.resolve();
},5000);
setTimeout(function() {
    a2.reject();
},1000);
setTimeout(function() {
    a3.resolve();
},3000);

在这主题上阅读了很多答案,但我不相信我的需要完全符合.

更多信息需要帮助请告诉我,我会在我回来后添加它.提前致谢.

编辑

我明白发生了什么.我只知道如何避免这个问题.我尝试使用.then同样的结果.一旦一个请求被拒绝,它就会在等待其他回调之前触发失败回调.

解决方法

根据 jQuery documentation $.当解析所有参数或其中一个被拒绝时触发回调.那么如何使用类似的东西而不是$.when:

var custom_when = function() {
    var args = $.makeArray(arguments);
    var callBACk = args.pop();
    var all = [];
    $.each(args,function(index,def) {
        def.always(function() {
            var idx = all.indexOf(def);
            if (idx !== -1) {
                all.splice(idx,1);
            }
            if (!all.length) {
                callBACk();
            }
        });
        all.push(def);
    });
};

你可以像这样使用它:

custom_when(a1,a3,function() {
    // do some stuff.
});

jsFiddle demo.

大佬总结

以上是大佬教程为你收集整理的jQuery ajax延迟回调命令全部内容,希望文章能够帮你解决jQuery ajax延迟回调命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。