我有以下代码:
$(function() {
(function poll(){
var update_progress = setTimeout(function(){
var jxhr = $.ajax({
type: "POST",
url: "grab.php",
data: "test",
success: function(data){
var error = data.error;
if(error == false) {
// My nonsense is here
} else if(error == true) {
// Stop sending AJAX request
clearTimeout(update_progress);
jxhr.abort();
}
}, dataType: "json", complete: poll, timeout: 2000 });
}, 2000);
})()
});
如您所见,如果我的脚本返回错误,我将尝试再次中止再次调用“ complete:”回调,并且我也清除了超时。
因此,从根本上讲,它不再应该执行任何ajax请求。但是它仍然可以。我怎么了
我认为这样可能有效:
$(function() {
(function poll(){
var keepPolling = true;
var update_progress = setTimeout(function(){
var jxhr = $.ajax({
type: "POST",
url: "grab.php",
data: "test",
success: function(data){
var error = data.error;
if(error == false) {
// My nonsense is here
} else if(error == true) {
// Stop sending AJAX request
keepPolling = false;
}
}, dataType: "json", complete: function() {
if (keepPolling) {
poll();
}
}, timeout: 2000 });
}, 2000);
})()
});
基本上,有一个额外的var可以跟踪是否要继续轮询。将其默认设置为true,并在出现错误时设置为false。然后,在完整方法中,检查是否要继续轮询,然后再次实际调用poll。
我不确定首先要说完成还是成功。如果首先调用complete,那么它将无法正常工作(尽管您可以在传递给setTimeout的函数顶部添加keepPolling检查)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句