按 ajax 设置和清除间隔

set and clear interval by ajax

我只是想清除之前的间隔并在进行 ajax 调用时设置一个新间隔。

当前代码为:

$("#title-form").change(function () {
    var title = $(this).val().trim();
    $.ajax({
        url: '/ajax/timing_check/',
        type: "get",
        data: {
        'title': title
        },
        dataType: 'json',
        success: function (data) {
            var interval = null;
            if(data.count_down){
            var _second = 1000;
            var _minute = _second * 60;
            var timer;
            var end = data.count_down
            mins = Math.floor(end / 60);
            secs = end % 60;

            var interval = setInterval(count,1000)
            function count(){
               console.log(parseInt(secs)) 
               secs -= 1

            }}
            else{
                var stop = function(){
                clearInterval(interval);}     
            }
        }
    })
})

我尝试了很多推荐的变体,以便能够从函数外部清除间隔。如;

将 "interval" 变量设置为 null 或 false,

window.setInterval,

在setInterval中写计数函数,

将计数函数写为 ajax 函数之外的单独函数,

但是这两种变化都没有清除间隔。

稍后我还需要清除按键间隔。

根据您的代码,我将按以下方式执行(P.S。未测试):

var interval = null,
    secs = 0;
function count() {
    console.log(secs);
    secs -= 1;
}
function deal_data(data) {
    if(interval == null && data.count_down){
        var end = data.count_down
        secs = end % 60;

        interval = setInterval(count, 1000);
    else if (interval != null) {
        clearInterval(interval);
    }
}


$("#title-form").change(function () {
    var title = $(this).val().trim();
    $.ajax({
        url: '/ajax/timing_check/',
        type: "get",
        data: { 'title': title },
        dataType: 'json',
        success: function (data) {
            deal_data(data);
        }
    })
})

在对 MarshalSHI 的回答进行了几次更改后,代码最终变成了这样:

$("#title-form").change(function () {
    var title = $(this).val().trim();
    $.ajax({
        url: '/ajax/timing_check/',
        type: "get",
        data: { 'title': title },
        dataType: 'json',
        success: function (data) {
            deal_data(data);
        }
    })
})

var interval = null;

function deal_data(data) {
    if(interval == null && data.count_down){
        var end = data.count_down
        secs = end % 60;

        interval = setInterval(count, 1000);}
    else if (interval != null) {
        clearInterval(interval);
        interval = null;
    }
}

function count() {
    console.log(secs);
    secs -= 1;
}