我有几种表格想立即发布到我的服务器上。 然后,我想听听他们完成的所有事情。 如果我听到它们全部成功完成,我将采取一项措施;如果看到一项失败,则将采取另一种措施。

我相信我应该使用jQuery的.when(): http : //api.jquery.com/jQuery.when/

当您明确定义了所有ajaxRequests时,StackOverflow上的该帖子显示了如何执行此操作的示例: 等待所有jQuery Ajax请求完成吗? 我想知道是否可以通过某种方式实现相同的效果?

我目前有此代码,但它并不等待所有完成:

_.each($('form'), function (form) {
            var $form = $(form);

            if ($form.valid()) {
                //  Post form data
                $.ajax({
                    url: $form.attr('action'),
                    type: $form.attr('method'),
                    data: getFormData($form),
                    success: function () {}
                    error: function(){}
                });
            }
        });

编辑:虽然我接受了一个答案..值得注意的是,正确的“答案”正在改变设计要求。 我们意识到,如果另一笔交易失败,则撤消这笔交易将非常困难,但是我们必须将所有交易保持在同一状态。 这使我们沿着甜菜根建议的道路前进,创建了一个巨型模型,但这又增加了许多其他复杂性。 这样,我们现在只需要用户保存就可以在标签之间进行切换。

===============>>#1 票数:1 已采纳

您可以使用jQuery.when

jQuery.when.apply(jQuery, $('form').map(function () {
    var $form = $(form);

    if ($form.valid()) {
        //  Post form data
        $.ajax({
            url: $form.attr('action'),
            type: $form.attr('method'),
            data: getFormData($form),
            success: function () {}
            error: function () {}
        });
    }

    // Otherwise don't do anything.
})).done(function (form1Ajax, form2Ajax, formNAjax) {
    // All complete    
}).fail(function (form1Ajax, form2Ajax, formNAjax) {
    // One failed
});

不幸的是, jQuery.when希望将每个Deferred作为单独的参数而不是Deferreds数组给出; 这就是为什么我们通过apply跳过障碍。

还要注意map()的行为; 如果返回undefinednull ,则不会将元素添加到结果数组中。

  ask by Sean Anderson translate from so

未解决问题?本站智能推荐: