相当于允许失败的jQuery.when

时间:2016-09-13 14:16:34

标签: jquery ajax

我发现当我们的多个请求都成功时,它们会正常工作,但如果其中一个请求因任何原因失败,我的回调就不会被执行。我在jQuery文档中挖了一下,说

  

在传递多个Deferred对象的情况下   jQuery.when(),该方法从一个新的" master"返回Promise。   跟踪所有Deferred的聚合状态的延迟对象   它已经过去了。该方法将解析其主延迟为   所有Deferreds解决之后,或者拒绝主人Deferreds   其中一个延期被拒绝

这意味着如果我提交n个请求并且它们都成功,则主对象将触发成功解析,并且将触发连接的回调(使用.then.done)。但是,如果这些n请求中的任何一个失败,那么主Promise将被拒绝,当其他子程序可能仍在工作时,我将调用failCallback。另外,除非我使用闭包,否则我无法在回调中访问这些子语句。

在jQuery中提交多个ajax请求的正确方法是什么,并且无论其中任何一个失败都有相同的行为?

2 个答案:

答案 0 :(得分:0)

听起来你想要恢复成功,不管个别请求是否失败(假设你也会单独处理)所以,一个快速的建议,如果你已经考虑过这个,请原谅我,就是包装你的AJAX调用try {} catch {}块,以防止在when()中终端失败,如:

G123

并在ajax函数中添加如下内容:     var ajax1 = function(){         尝试{             $ .ajax(function(){                 成功:功能(res){//做东西}             });         } catch(){             //什么也不做,我相信这会好的         }     }

或者,另一种方法:

var ajax1 = function () { //do ajax stuff but return "success" on err
var ajax2 = function () { //do ajax stuff but return "success" on err 

$.when(ajax1, ajax2).then(doMoreStuff);

这几乎是伪代码来演示这个概念,假设你可以填空。

希望它有所帮助!

更新

回应你的评论。我想的是:

$.ajax(function () { 
    success: function(){}, 
    error: function () {
        //handle the error 
        return success; 
});

我在原始示例中添加了try catch。

答案 1 :(得分:0)

我一开始并没有建议这样做,因为您似乎正在使用可以单独列出的promises / deferred,但是使用$ .apply()可能会起作用。这将“单独”运行数组中的所有项目。

type="number"

即使你遇到问题,也应该运行所有这些并运行.then()。