【问题标题】:.each() $.ajax display message after complete.each() $.ajax 完成后显示消息
【发布时间】:2023-03-17 16:25:02
【问题描述】:

在我的each() 完成其中的所有任务后,我需要显示一些文本。但似乎他们正在异步运行并且“完成”。显示得太早。我曾尝试使用延迟,但这没关系。如您所见,我将成功和失败信息发送到一个模式,以显示哪些记录已保存或失败。在所有$.ajax 调用完成后,需要“完成”。

$(".QueueGrid tbody > tr").each(function () {
    dcn = "";
    if ($(this).find(".chkOtherSelected").prop("checked")) {
        claimnum = $(this).find("td:eq(2)").text();
        dcn = $(this).find("td:eq(5)").text();
        $.ajax({
            type: "POST",
            url: "Approval_Inbox.aspx/SaveNote",
            data: "{dcn:'" + dcn + "',note:'" + note + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false,
            timeout: 8000,
            beforeSend: function () {
                str = "- " + dcn + "<br />";
            },
            success: function (data) {
                _savedSucess += str;
            },
            error: function () {
                _savedFail += str;
            },
            complete: function (data) {
                $("#divMassMessage").fadeIn("fast");
                $("#divMassMessage").center();
                $('#MainContent_savedSucess').html(_savedSucess);
                $('#MainContent_savedFail').html(_savedFail);
            }
        });
    }
});
$(".saveComplete").html("done.");

【问题讨论】:

  • 您可能应该重新考虑您的方法并在一个 ajax 请求中完成整个事情,循环 ajax 请求通常是一个坏主意,除非您 100% 确定这是行为并且唯一的解决方案您的需求。

标签: javascript jquery ajax each


【解决方案1】:

在 AJAX 完整函数中,您可以检查 this 是否是您正在解析的元素数组的最后一个成员,即获取 $().each 数组中元素的数量和检查当前元素是否等于数组的长度。如果是,请写下完整的消息。如果没有,还有更多的元素需要循环。

【讨论】:

    【解决方案2】:

    AJAX 本质上是异步的。您可以强制它同步(async: false),但这会在请求期间锁定浏览器。

    或者,您可以计算发出的请求数,然后每次完成时调用一个函数。计算完成次数,当它与调用次数匹配时,触发警报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2015-04-26
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      相关资源
      最近更新 更多