中止JavaScript setTimeout函数

时间:2013-06-27 19:26:53

标签: javascript jquery ajax

标题可能会产生误导,但这基本上是我需要完成的。

如果服务器响应时间超过15秒,我想要更新一个AJAX“正在加载”的文本。

以下是代码:

$(".loader").html('Loading');
$(".loader").show();
setTimeout(function () {
    if ($('.loader').is(":visible")) {
        $(".loader").html('Click <a href="javascript:location.reload()">here</a> to reload.</span>');
    }
}, 15000);

有更好的方法吗?当我最终致电$(".loader").hide();时,我希望setTimeout计数器被中止。有可能吗?

3 个答案:

答案 0 :(得分:5)

不确定。 setTimeout会返回您可以传递给clearTimeout的值,以便停止超时。

var handle = setTimeout(function () {
    alert("Oh noes, I ran!")
}, 5000)

clearTimeout(handle)

答案 1 :(得分:0)

您可以使用clearTimeout功能:

$(".loader").html('Loading');
$(".loader").show();
var timerId= setTimeout(function () {
    if ($('.loader').is(":visible")) {
        $(".loader").html('Click <a href="javascript:location.reload()">here</a> to reload.</span>');
    }
}, 15000);

$(".stop").click(function () {
    clearTimeout(timerId);
    $(".loader").html("done");
});

看到这个小提琴:http://jsfiddle.net/KaNUP/

答案 2 :(得分:-1)

我建议缩短一段时间(1秒)并在你调用的函数内增加计数器。然后您可以在成功加载或计数器阈值时退出,以较早者为准。