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

如何在外部暂停和停止递归javascript函数,javascript,jquery,Javascript,Jquery,我有一个函数,在ajax调用返回0之前,它会暂停2秒来调用自己。现在它可以持续很长一段时间,因此我希望暂停它,或者通过一个外部事件(比如点击按钮)来停止它 function create_abcd() { var dataString = 'action=create_abcd&type=' + $('#abcd_type').val() + '&count=100'; $.ajax({ type: "POST", url: "ba

我有一个函数,在ajax调用返回0之前,它会暂停2秒来调用自己。现在它可以持续很长一段时间,因此我希望暂停它,或者通过一个外部事件(比如点击按钮)来停止它

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;
        }
    });
}
函数创建 { var dataString='action=create_abcd&type='+$('.#abcd_type')。val()+'&count=100'; $.ajax({ 类型:“POST”, url:“backend.php”, 数据:dataString, 成功:功能(msg){ 如果(消息!=“0”) { $(“#输出”)。追加(“”+msg+”

”) 设置超时(创建,2000年); } 其他的 返回false; } }); } 任何帮助都将不胜感激

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

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

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

create\u abcd
的顶部,只需在继续之前检查该变量或输入即可。如果设置了特殊值,只需在再次设置超时之前退出即可。

类似于:

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;
});
var needStop=false;
函数create_abcd()
{
var dataString='action=create_abcd&type='+$('.#abcd_type')。val()+'&count=100';
$.ajax({
类型:“POST”,
url:“backend.php”,
数据:dataString,
成功:功能(msg){
如果(需要停止){
needStop=false;
返回;
}
如果(消息!=“0”)
{
$(“#输出”)。追加(“”+msg+”

”) 设置超时(创建,2000年); } 其他的 返回false; } }); } $(“#按钮”)。单击(函数(){ needStop=true; });

=)

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

而是使用推送机构

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


您自己有没有尝试过解决这个问题?应该像设置一个在下一次迭代运行前检查的变量一样简单。是的,用按钮设置一个全局变量,让函数在每次运行时检查变量的值,这是我没有想到的!谢谢让我试试,然后回来。很抱歉,我是一个新手,但我在发布之前做了很多尝试。要补充一点:为了100%确保函数在单击停止按钮后不会再次运行,您应该捕获超时函数的引用并调用
cleartimout
实际上不,该进程太大,无法在共享服务器上一次性执行,因为它将超时。但是谢谢你的信息!这是一本很棒的书!一些新的东西需要学习,我肯定可以在我的项目中使用它!!令人惊叹的!!你是个救生员。对我来说,一天一天都很无聊:)更新:第二个解决方案工作得很好,但如果我在函数执行过程中单击“暂停”,第一个解决方案会以某种方式继续运行。它在函数未运行时工作。