JQuery, когда каждый завершен, функция триггера - PullRequest
5 голосов
/ 11 декабря 2011

как запустить такую ​​функцию, как перенаправление на новую страницу, когда .each завершает цикл моих элементов?это мой текущий код:

$('#tabCurrentFriends > .dragFriend').each(function(){ 
    var friendId = $(this).data('rowid');
    $.ajax({
        type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid,
        complete: function(data){
        }
    });
});

Ответы [ 2 ]

13 голосов
/ 11 декабря 2011

Вы можете использовать $.when() / $.then() для перенаправления пользователей после выполнения всех запросов AJAX:

//create array to hold deferred objects
var XHRs = [];
$('#tabCurrentFriends > .dragFriend').each(function(){  
    var friendId = $(this).data('rowid'); 

    //push a deferred object onto the `XHRs` array
    XHRs.push($.ajax({ 
        type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid, 
        complete: function(data){ 
        } 
    })); 
}); 

//run a function when all deferred objects resolve
$.when(XHRs).then(function (){
    window.location = 'http://stackoverflow.com/';
});

Редактировать - использовать when с массивом, apply необходимо использовать:

$.when.apply(null, XHRs).then(function () {
    window.location = 'http://stackoverflow.com/';
});

jQuery AJAX-запросы создают отложенные объекты, которые разрешаются при срабатывании их полной функции.Этот код сохраняет эти отложенные объекты в массиве, и когда все они разрешают, запускается функция в .then().

Документы:

5 голосов
/ 11 декабря 2011

AJAX происходит асинхронно, поэтому вам придется попробовать что-то вроде этого:

var total = $('#tabCurrentFriends > .dragFriend').length;
var completed = 0;

$('#tabCurrentFriends > .dragFriend').each(function(){ 
    var friendId = $(this).data('rowid');
        $.ajax({
            type: "POST", url: "../../page/newtab.php", data: "action=new&tabname=" + tabname + "&bid=" + brugerid + "&fid=" + friendid,
            complete: function(data){
              completed++;

              if (completed == total) {
                // All have been loaded.
              }
        }
    });
});
...