如何外部暂停和停止递归javascript函数

时间:2012-05-25 20:18:01

标签: javascript jquery

我有一个函数,它会以2秒的暂停调用自己,直到ajax调用返回0.现在它可以持续很长时间,因此我希望暂停它或使用外部事件(如按钮单击)停止它

function create_abcd()
{
    var dataString = 'action=create_abcd&type=' + $('#abcd_type').val() + '&count=100';
    $.ajax({
        type: "POST",
        url: "backend.php",
        data: dataString,
        success: function(msg){
            if(msg != "0")
            {
                $("#abcd_output").append('<p>' + msg + '</p>')
                    setTimeout(create_abcd, 2000);
            }
            else
                return false;
        }
    });
}

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:7)

类似的东西:

var needStop = false;

function create_abcd()
{
    var dataString = 'action=create_abcd&type=' + $('#abcd_type').val() + '&count=100';
    $.ajax({
        type: "POST",
        url: "backend.php",
        data: dataString,
        success: function(msg){
            if(needStop) {
                needStop = false;
                return;
            }
            if(msg != "0")
            {
                $("#abcd_output").append('<p>' + msg + '</p>')
                    setTimeout(create_abcd, 2000);
            }
            else
                return false;
        }
    });
}

$('#button').click(function() {
    needStop = true;
});

=)

答案 1 :(得分:2)

我认为你试图以错误的方式解决问题。当一些长时间运行的进程在服务器上完成时,你显然想要通知gen,所以你每2秒轮询一次。这将导致许多不必要的请求。

改为使用推送机制。

考虑使用COMET,因为你是PHP:

http://www.zeitoun.net/articles/comet_and_php/start

答案 2 :(得分:0)

创建一个全局变量(甚至是页面上的隐藏输入)。

在页面上创建一个“停止”按钮。

单击“停止”按钮时,只需将输入或变量设置为特殊值即可。

create_abcd的顶部,只需检查该变量或输入,然后再继续。如果设置了特殊值,则在再次设置超时之前退出。