Javascript 在ajax调用中使用clearTimeout(x)

Javascript 在ajax调用中使用clearTimeout(x),javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在编写代码,其中的代码将使用AJAX对服务器进行一些统计轮询。服务器返回数据后,我的web应用程序每3秒从服务器获取一次数据。它工作得很好,但是,我想应用clearTimeout(x)函数停止执行,并在错误触发的任何错误(如“超时”或“错误”)发生时向用户打印一些内容。我设法与我一起搜索了类似的案例,这也是。但由于某些原因,我的代码不能满足我的要求。这是我到目前为止所拥有的 var timeoutid = 0; var myfunc = function() { $.ajax({

我正在编写代码,其中的代码将使用AJAX对服务器进行一些统计轮询。服务器返回数据后,我的web应用程序每3秒从服务器获取一次数据。它工作得很好,但是,我想应用clearTimeout(x)函数停止执行,并在
错误触发的任何错误(如“超时”或“错误”)发生时向用户打印一些内容。我设法与我一起搜索了类似的案例,这也是。但由于某些原因,我的代码不能满足我的要求。这是我到目前为止所拥有的

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方面,我并不是一个真正的大师。感谢您的友好回复,并提前向您表示感谢。

这是因为您再次在完整回调中创建了一个新的计时器,在出现错误时也会执行该计时器

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();

谢谢你,我已经测试过了,它可以工作了!这就解释了。很好,但是我必须使用clearTimeout(x)函数吗?@UserProg不是必需的。。如果您使用的是间隔,那么您必须。。。由于您使用的是超时,因此无需对此进行设置。因为我对
setInterval
setTimeout
有点困惑。无论如何,谢谢你的帮助。我接受这个答案。嗨,有一个问题。它工作正常。然而,有时&我甚至不知道为什么当我单击指向包含上述脚本的同一页面的链接或导航到其他页面时,
错误:
回调中的警报会弹出。知道为什么吗?@UserProg-see&