我有一个ajax函数,每30秒循环一次,直到服务器返回"完成"。一旦发生这种情况,我希望它能够停止循环,但我无法让它停止。
我正在尝试使用
success: function(data) {
var test_function = function() {
$.ajax({
type:"POST",
url:"process.php?query",
data:form.serialize(),
success: function(data){
if (data != "done") {
Loading();
$("#results").html(data);
} else {
$.ajax({
type:"POST",
url:"process.php?finished",
data:form.serialize(),
success: function(data){
$("#results").html(data);
Done();
}
});
}
}
});
};
var refreshInterval = 5 * 1000;
setInterval(test_function, refreshInterval);
}
setInterval在循环方面按预期工作,但我不能让它停止("成功:"在另一个ajax调用结束时)。 (我没有在代码中尝试过,但我尝试了几次clearInterval)。我的猜测是我循环它的方式,或者我使用的ajax调用量是我的问题。任何帮助表示赞赏。
答案 0 :(得分:1)
setTimeout
更强大。试试这个:
success: function (data) {
var refreshInterval = 5 * 1000,
isDone = false;
(function test_function() {
$.ajax({
type: "post",
url: "process.php?query",
data: form.serialize(),
success: function (data){
if (!isDone) {
Loading();
$("#results").html(data);
} else {
$.ajax({
type: "post",
url: "process.php?finished",
data: form.serialize(),
success: function (data){
isDone = true;
$("#results").html(data);
Done();
}
});
}
}
});
if (!isDone) {
setTimeout(test_function, refreshInterval)
}
})();
}
答案 1 :(得分:-1)
从代码的顺序开始,即使在完成'完成后的if条件之后,serInterval也会继续。很满意
我添加了一个变量刷新来保持状态是否完成以及是否需要刷新。 试试这个:
success: function(data) {
var refresh = true;
var test_function = function() {
$.ajax({
type:"POST",
url:"process.php?query",
data:form.serialize(),
success: function(data){
if (data != "done") {
Loading();
$("#results").html(data);
} else {
$.ajax({
type:"POST",
url:"process.php?finished",
data:form.serialize(),
success: function(data){
refresh = false;
$("#results").html(data);
Done();
}
});
}
}
});
};
if (refresh){
var refreshInterval = 5 * 1000;
setInterval(test_function, refreshInterval);
}
}