jquery循环函数直到变量集

时间:2014-12-15 19:26:09

标签: jquery ajax

我有一个ajax函数,每30秒循环一次,直到服务器返回"完成"。一旦发生这种情况,我希望它能够停止循环,但我无法让它停止。

我正在尝试使用

success: function(data) {
    var test_function = function() {
        $.ajax({
            type:"POST",
            url:"process.php?query",
            data:form.serialize(),
            success: function(data){
                if (data != "done") {
                    Loading();
                    $("#results").html(data);
                } else {
                    $.ajax({
                        type:"POST",
                        url:"process.php?finished",
                        data:form.serialize(),
                        success: function(data){
                            $("#results").html(data);
                            Done();
                        }
                    });
                }
            }
        });
    };
    var refreshInterval = 5 * 1000;
    setInterval(test_function, refreshInterval);
}

setInterval在循环方面按预期工作,但我不能让它停止("成功:"在另一个ajax调用结束时)。 (我没有在代码中尝试过,但我尝试了几次clearInterval)。我的猜测是我循环它的方式,或者我使用的ajax调用量是我的问题。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

setTimeout更强大。试试这个:

success: function (data) {

    var refreshInterval = 5 * 1000,
        isDone = false;

    (function test_function() {

        $.ajax({
            type: "post",
            url: "process.php?query",
            data: form.serialize(),
            success: function (data){

                if (!isDone) {

                    Loading();
                    $("#results").html(data);

                } else {

                    $.ajax({
                        type: "post",
                        url: "process.php?finished",
                        data: form.serialize(),
                        success: function (data){

                            isDone = true;

                            $("#results").html(data);
                            Done();

                        }
                    });

                }
            }
        });

        if (!isDone) {
            setTimeout(test_function, refreshInterval)
        }

    })();

}

答案 1 :(得分:-1)

从代码的顺序开始,即使在完成'完成后的if条件之后,serInterval也会继续。很满意

我添加了一个变量刷新来保持状态是否完成以及是否需要刷新。 试试这个:

success: function(data) {
  var refresh = true;
  var test_function = function() {
    $.ajax({
        type:"POST",
        url:"process.php?query",
        data:form.serialize(),
        success: function(data){
            if (data != "done") {
                Loading();
                $("#results").html(data);

   } else {
                $.ajax({
                    type:"POST",
                    url:"process.php?finished",
                    data:form.serialize(),
                    success: function(data){
                        refresh = false;
                        $("#results").html(data);
                        Done();
                    }
                });
            }
        }
    });
 };

 if (refresh){
 var refreshInterval = 5 * 1000;
 setInterval(test_function, refreshInterval);
 }
}