【问题标题】:Breaking for loop inside ajax response在ajax响应中打破for循环
【发布时间】:2014-01-28 10:43:24
【问题描述】:

好的,我正在为已发送的消息制作进度条!我需要打破 ajax 请求响应中的 foo 循环!代码如下:

var breakFlag = false;
loop:
for (var i = 0; i < count; ++i) {
    name = userArr[i]['fName'];
    surname = userArr[i]['lName'];
    phone = userArr[i]['phone'];
    counter = i;
    $.ajax({
        type: "POST",
        url: HTTPS + '/lib/model/data/ctlSms.php?send=1',
        data: {
            smsMessage: $("#smsMessage").val(),
            smsClient: $("#smsClient").val(),
            number: $("#number").val(),
            throttle: $("#throttle").val(),
            userPhone: phone,
            fName: name,
            lName: surname,
            counter: counter
        },
        dataType: 'json',
        success: function(info) {
            if (info['results'] == "success") {
                if (start) {
                    $("#progress").width(progress);
                    $("#messageArea").append(info['info']);
                    start = false;
                } else {
                    tempPr = $("#progress").width() + progress;
                    $("#messageArea").append(info['info']);
                    $("#progress").width(tempPr);
                }
            } else {
                failed++;
                if (start) {
                    $("#progress").width(progress);
                    $("#messageArea").append(info['info']);
                    start = false;
                } else {
                    tempPr = $("#progress").width() + progress;
                    $("#messageArea").append(info['info']);
                    $("#progress").width(tempPr);
                }
            }
            if ((parseInt(info['counter'])) == count) {
                var success = count - failed;
                $("#messageArea").append("<span>Total of " + count + " messages serviced!</span><br><span style='color:green'>Sucessful: " + success + "</span><br><span style='color:red'>Failed: " + failed + "</span><br>");
            } else if (failed == $("#maxFail").val() && $("#maxFail") != "") {
                var tempCount = info['counter'] + 1;
                $("#messageArea").append("<span>Total of " + tempCount + " messages serviced!</span><br><span style='color:red'>Max failes: " + failed + " reached!</span><br>");
                breakFlag = true;
            }
        },
        error: function() {
            $("#messageArea").append("<span>Ajax error with </span><br>");
        }
    });
    console.log(breakFlag);
    if (breakFlag) {
        console.log("break");
        break loop;
    }
}

Okey,所以我将 global var breakFlag 设置为 false,如果满足最大允许失败,则在 ajax 响应中将 breakFlag 设置为 true,并且在 for 循环周期结束之前,我检查此标志是否设置为 true...好的,我在设置为 true 后控制台登录,它说 true,但是当我在循环结束之前检查外部响应时,它再次为 false,下一个 xyxle 开始???为什么会这样?

【问题讨论】:

  • 你可以用 return false 来打破循环;
  • 这不起作用...最后一个循环仍在执行!

标签: jquery ajax for-loop break


【解决方案1】:

好的,我解决了我的问题!我没有将异步设置为 false。之后,当一切都被冻结时,我可以将 flag 设置为 true,在循环结束之前,它看到它已经改变并 boke foor 循环...... :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多