首页 > 解决方案 > 在每个循环后使用 ajax 调用调用一个函数

问题描述

我有一个循环,我正在制作一个 ajax 帖子。我只想在我的循环(以及每个循环内的 ajax 帖子)完成后才执行函数“doSomething()”。

我认为这被称为一个承诺,但我只是在永远做服务器端之后才进入 jQuery ......

 selectedRows.each(function(e) {
            var dataforpost = { groupId: selectedGroup.Id, 
            userName: userName, displayName: displayName };

            $.ajax({
                url: '@Url.Action("AddMemberToGroup")',
                type: "POST",
                data: dataforpost,
                success: function(data) {}
            });
        });
        
  // now when that loop is done, do something
  doSomething();

标签: javascriptjquerypromise

解决方案


您可以使用$.when

$.when(selectedRows.each(function(e) {
  var dataforpost = { groupId: selectedGroup.Id, 
  userName: userName, displayName: displayName };

  $.ajax({
    url: '@Url.Action("AddMemberToGroup")',
    type: "POST",
    data: dataforpost,
    success: function(data) {}
  });
})).then(function() {
  // now when that loop is done, do something
  doSomething();
});

或者您可以跟踪最后一个循环并触发done函数调用:

selectedRows.each(function(i, e) {
  var dataforpost = { groupId: selectedGroup.Id, 
  userName: userName, displayName: displayName };

  $.ajax({
    url: '@Url.Action("AddMemberToGroup")',
    type: "POST",
    data: dataforpost,
    success: function(data) {},
    done: function() {
      if (i == selectedRows.length - 1) {
        // now when that loop is done, do something
        doSomething();
      }
    }
  });
});

推荐阅读