我正在编写代码,代码将使用AJAX对服务器进行一些轮询统计。我的Web应用程序在服务器返回数据后每隔3秒从服务器获取数据。它运行良好,但是,我想应用clearTimeout(x)函数来停止执行并在发生任何错误时向用户打印一些内容,如" timeout"或"错误"由error
设置触发。我设法与我here搜索了类似的案例,这也是link。但由于某种原因,我的代码没有做我想要的。这是我到目前为止所拥有的
var timeoutid = 0;
var myfunc = function() {
$.ajax({
type: "POST",
url: "pull.php",
error: function(xhr, status, error){
if( status==="timeout" || status==="error") {
alert("Timeout or unable to receive statistics!");
clearTimeout(timeoutid);
}
},
success: function(msg){
$('#res').val(msg);
//timeoutid = setTimeout(poll, 3000);
},
complete: function(){
timeoutid = setTimeout(myfunc, 3000);
},
timeout: 5000
});
}
myfunc();
当我禁用我的Internet适配器时,上面的结果是它保持循环并在不停止执行的情况下提醒我错误。根据我所读到的内容,由于本地化变量问题,我根本不知道如何或在哪里放置clearTimeout。虽然不是jQuery中的高手。感谢您的回复,并提前感谢您。
答案 0 :(得分:0)
这是因为你再次在完整的回调中创建一个新的计时器,在错误的情况下也会执行
var myfunc = function () {
$.ajax({
type: "POST",
url: "pull.php",
error: function (xhr, status, error) {
if (status === "timeout" || status === "error") {
alert("Timeout or unable to receive statistics!");
}
},
success: function (msg) {
$('#res').val(msg);
},
complete: function (jqXHR, status) {
if (status !== "timeout" && status !== "error") {
setTimeout(myfunc, 3000);
}
},
timeout: 5000
});
}
myfunc();