我有一个函数,它会以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;
}
});
}
任何帮助将不胜感激!
答案 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:
答案 2 :(得分:0)
创建一个全局变量(甚至是页面上的隐藏输入)。
在页面上创建一个“停止”按钮。
单击“停止”按钮时,只需将输入或变量设置为特殊值即可。
在create_abcd
的顶部,只需检查该变量或输入,然后再继续。如果设置了特殊值,则在再次设置超时之前退出。