2

我有一个函数,它以 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;
        }
    });
}

任何帮助将不胜感激!

4

3 回答 3

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;
});

=)

于 2012-05-25T20:23:10.490 回答
2

我认为你试图以错误的方式解决你的问题。当服务器上的某个长时间运行的进程完成时,您显然希望生成通知,因此您每 2 秒轮询一次。这会导致很多不必要的请求。

而是使用推送机制。

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

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

于 2012-05-25T20:24:14.017 回答
0

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

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

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

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

于 2012-05-25T20:21:38.260 回答