Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在执行函数之前,等待Ajax调用(以$为单位)。每个循环完成_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 在执行函数之前,等待Ajax调用(以$为单位)。每个循环完成

Javascript 在执行函数之前,等待Ajax调用(以$为单位)。每个循环完成,javascript,jquery,ajax,Javascript,Jquery,Ajax,我只想在$中进行的所有ajax调用完成后调用函数。实现这一目标的最佳方式是什么 function recaculateSeatingChartSeatIds() { var table_id = $(".seatingChartTable").attr("id"); var seat_id = 0; $(".nameContainer").find("p").each(function() { seat_id++; var participant_id = $(t

我只想在$中进行的所有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();
}

如果在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();
}

这将允许您同时调用它们,并且<>代码>函数-完整的只在所有Ajax调用已经完成

时运行,我正在编写一个脚本来帮助他作出承诺,但在中间,有人把它标记为重复的和封闭的答案。不管怎样,我认为它将是一个很好的承诺候选人。我对承诺不熟悉,我会调查一下。谢谢,基本上,在循环中,您添加了新的承诺(函数(resolve,reject){//当ajax成功时;resolve(ajax结果);//当错误发生时;reject(result)});然后在循环之外添加Promise.all(promiseArray)。然后(function(result){//all计算并返回结果数组})。catch(function(result){//至少有一个ajax请求失败了。})不是真的,我的意思是HTML5附带的。IE的旧版本仍然不支持它,但有多填充。不仅对于ajax,它还有很多用途。例如,您可以使用promise打开一个弹出窗口,解决或拒绝每个用户的按钮单击,并在同一功能中运行其他内容等,