我有几种形式,我想马上发布到我的服务器上。然后,我想倾听他们所有的要完成。如果我听到他们都成功完成,我会采取一个行动,如果我看到一个失败,我会采取不同的行动。是否有可能使用jQuery的.when()与forEach循环的Ajax调用?
这个职位在计算器上显示了如何当你把所有的ajaxRequests明确定义的做到这一点的例子:Wait until all jQuery Ajax requests are done?我想知道是否有可能以某种方式实现与循环相同的效果?
我现在有这样的代码,但它不会等待所有完成:
_.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
糟糕的设计。一次提交所有表格的数据。一个请求,一个承诺。 –
+0
你能深入探讨一下吗?如果要发布大量数据并且我不想要过大的POST,会发生什么情况?另外,我的一些表单可能不是很脏,所以接收服务器端方法将不得不容纳可变数量的模型,而不是仅仅让每个服务器端方法在收到相应的POST时单独响应?此外,我想对每个表单的错误回调有不同的回应。这很复杂,如果我只有一个错误回调,因为我必须找出哪些错误。 –
+0
除非有标准的方法/实用程序,否则需要一点思考,基本上涉及所有序列化表单的连接,并使用表单标识符来标识每个数据集。在服务器端,您可能需要一些自定义请求解析来将每个表单的单个数据项分开。然后,您将拥有处理所有表单数据所需的所有数据,并组成一个复合(JSON编码)响应,其中包括用于标记数据的表单ID。回到客户端,循环回应,并采取相应措施。简单! :-) –