【问题标题】:set and clear interval by ajax通过ajax设置和清除间隔
【发布时间】:2020-09-28 10:48:43
【问题描述】:

我只是想清除以前的间隔并在进行 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);}     
            }
        }
    })
})

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

将“间隔”变量设置为 null 或 false,

window.setInterval,

在setInterval里面写count函数,

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

但两种变体都没有清除间隔。

稍后我还需要清除 keydown 的间隔。

【问题讨论】:

    标签: javascript ajax setinterval clearinterval


    【解决方案1】:

    根据您的代码,我将执行以下操作(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);
            }
        })
    })
    

    【讨论】:

    • 非常感谢,代码有轻微的拼写错误,但可以正常工作。
    【解决方案2】:

    在对 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      相关资源
      最近更新 更多