等待直到Ajax调用$ .each循环完成执行函数之前

时间:2017-03-17 19:08:15

标签: javascript jquery ajax

我想在$ .each循环完成的所有ajax调用之后才调用函数。实现这一目标的最佳方法是什么?

function recaculateSeatingChartSeatIds()
{
var table_id = $(".seatingChartTable").attr("id");
var seat_id = 0;
$(".nameContainer").find("p").each(function()
{
        seat_id++;
        var participant_id = $(this).attr("data-part-id");
        $.ajax({
            method: 'POST',
            datatype: 'jsonp',
            url: base_url + 'users/assignToTableAndSeat/' + event_id + "/" + participant_id + "/" + table_id + "/" + seat_id
        }).done(function () {
            console.log("Participant Added");
        }).fail(function (xhr, text, error) {
            console.log(error);
        });
});
funcToCallAfterAllComplete();
}

1 个答案:

答案 0 :(得分:0)

如果你在ajax调用后在每个p上设置了一个标志,然后总是调用一个函数来检查所有p是否有那个标志

$(".nameContainer").find("p").each(function()
{
        seat_id++;
        var participant_id = $(this).attr("data-part-id");
        $.ajax({
            method: 'POST',
            datatype: 'jsonp',
            url: base_url + 'users/assignToTableAndSeat/' + event_id + "/" + participant_id + "/" + table_id + "/" + seat_id
        }).done(function () {
            console.log("Participant Added");
            $("p[data-part-id='"+ participant_id +"']").data('completed', 'completed');

        }).fail(function (xhr, text, error) {
            console.log(error);
        });
});
tryFuncToCallAfterAllComplete(){
    $(".nameContainer").find("p").each(function()
    {
        if($(this).data('complete') != 'completed'){
            return;
        }
    }
    funcToCallAfterAllComplete();
}
funcToCallAfterAllComplete();
}

这将允许您仍然同时调用它们,并且funcToCallAfterAllComplete仅在所有ajax调用完成时运行