Вызов функции после каждого цикла с помощью вызовов ajax - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть цикл, в котором я делаю пост Ajax. Я хочу выполнить функцию doSomething () только после завершения цикла (и сообщений ajax внутри каждого цикла).

Я думаю, это называется обещанием, но я просто вхожу в 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();

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Perharps помогает:

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

        var jqxhr = $.ajax({
            url: '@Url.Action("AddMemberToGroup")',
            type: "POST",
            data: dataforpost,
            success: function(data) {}
        });
        jqxhr.then(function() {
          console.log( index );
          if ((index+1) >= selectedRows.length){
             console.log('last');
             // now when that loop is done, do something
             doSomething();
          }
        });
    });
0 голосов
/ 28 апреля 2018

Вы можете использовать $.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();
      }
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...