关于setInterval运行一段时间后原本定时15s最终变成大于15s一分钟执行一轮

关于setInterval运行一段时间后原本定时15s最终变成变成规律的一分钟执行一轮,ajax 1s就回复了忽略不考虑。


var it = null;
$.ajax({
        type : 'POST',
        url : '',
        data : {
        },
        success : function(data) {
            if(data != null && data != ""){
            it = setInterval('refreshQuery()', 15000);
            }else{
                    clearInterval(it)
                }

            }
        }

function refreshQuery() {
    console.log("心跳开始时间"+new Date())
    var dataStr = '';
    $.ajax({
        type : 'POST',
        dataType : "text",
        url : '',
        data : {

        },
        success : function(data) {
            console.log("心跳回复时间"+new Date())

        }
    })
}

修改正常之后代码加入以下代码就正常了
clearInterval(it)
it = setInterval('refreshQuery()', 15000);

function refreshQuery() {
    console.log("心跳开始时间"+new Date())
    var dataStr = '';
    $.ajax({
        type : 'POST',
        dataType : "text",
        url : '/pqs9000/device/socketon',
        async : true,
        data : {
            message : dataStr,
            lineIndex:lineIndex
        },
        success : function(data) {
            console.log("心跳回复时间"+new Date())


            **clearInterval(it)
            it = setInterval('refreshQuery()', 15000);**


        }
    })
}

你的ajax请求也同样需要时间呀?

逻辑上来说你对应的时间应该是 15s + ajax 请求后台返回的时间 所以会导致对应的时间可能会有一些出入

这里是不是多了个else

img


把clearInterval放到上面

img