如何在外部暂停和停止递归javascript函数
我有一个函数,在ajax调用返回0之前,它会暂停2秒来调用自己。现在它可以持续很长一段时间,因此我希望暂停它,或者通过一个外部事件(比如点击按钮)来停止它如何在外部暂停和停止递归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
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
实际上不,该进程太大,无法在共享服务器上一次性执行,因为它将超时。但是谢谢你的信息!这是一本很棒的书!一些新的东西需要学习,我肯定可以在我的项目中使用它!!令人惊叹的!!你是个救生员。对我来说,一天一天都很无聊:)更新:第二个解决方案工作得很好,但如果我在函数执行过程中单击“暂停”,第一个解决方案会以某种方式继续运行。它在函数未运行时工作。