0

在我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.");
4

2 回答 2

0

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

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

于 2012-08-07T20:12:36.577 回答
0

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

于 2012-08-07T20:19:15.500 回答