在ajax调用中使用clearTimeout(x)

时间:2015-02-23 05:41:22

标签: javascript jquery ajax

我正在编写代码,代码将使用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中的高手。感谢您的回复,并提前感谢您。

1 个答案:

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