javascript - 如何在ajax请求中停止setTimeout

标签 javascript jquery ajax

它进行 ajax 调用,每次调用之间有 5 秒的延迟。

如何在 30 秒后使用 clearTimeout 在 ajax 中停止此 setTimeout?

$.ajax({
    url  : url,
    success : function(response){
         var Object = this;
         setTimeout(function(){     //How to stop this setTimeout
         $.ajax(Object);}, 5000)}   //using clearTimeout after 30 seconds?
          },
    });

最佳答案

首先,您所做的称为“轮询”技术。为了做到这一点,“正确的方式”,最好使用递归函数,而不是:

var Object = this;
$.ajax(Object);

最好这样写:

function pollData() {
    $.ajax({
        url  : url,
        success : function(response){
            setTimeout(function() {
                pollData();
            }, 5000);
        }
}

下一个问题是,如果您由于某种原因想要停止轮询(例如 3 秒后)怎么办? setTimeout 返回一个 ID,您稍后可以使用该 ID 来 clearTimeout:

var pollingStatus = true;
var pollingTm = null;

function pollData() {
    $.ajax({
        url  : url,
        success : function(response){
            if (pollingStatus) {
                pollingTm = setTimeout(function() {
                    pollData();
                }, 5000);
            }
        }
}

function stopPolling() {
    pollingStatus = false;
    clearTimeout(pollingTm);
}

setTimeout(stopPolling, 3000);

关于javascript - 如何在ajax请求中停止setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48365966/

相关文章:

javascript - 选择 HTML 内容

javascript - jquery - 查找表中的元素并根据结果更改其他元素

javascript - 尝试让自动完成列表出现在图表顶部

jquery - Axios 对雅虎天气 API 的请求失败

javascript - AngularJS - 广播事件后更新指令的 View

javascript - jQuery - 宽度的平滑增加

javascript - 在 APEX Oracle 中将背景颜色更改为按钮

javascript - jQuery $获取错误消息 : Not Found

javascript - 夏令时与 JavaScript

javascript - 是不是限制范围比较好?