【问题标题】:jQuery clearTimeout on ajax success is getting confused and not clearing previous timeoutsajax成功的jQuery clearTimeout变得混乱并且没有清除以前的超时
【发布时间】:2014-12-21 00:57:04
【问题描述】:

我有一个由 jQuery ajax 提交的表单,它有错误验证服务器端。在 beforeSend 我显示 一个 gif 加载器和一些加载文本,当验证发送回成功方法时,我会显示相应的错误消息。 此消息在 x 秒后有超时隐藏。无论如何,当我继续单击提交按钮时, setTimeout 本身就令人困惑,而以前的则没有清除。这是我正在使用的代码:

编辑

$('form').on('submit', function(e) {

e.preventDefault();
var timer = null;

$.ajax({
    beforeSend; function() {
        $('.response').html('Processing form, please wait...');
    },

    success: function(data) {

        if(data.error == true) {
            $('.response').html('An error occurred.');
        } else {
            $('.response').html('Thank you. Form submitted successfully.');
        }

        if(timer) { clearTimeout(timer) };
        timer = setTimeout(function() {
            $('.response').html('* Indicates required fields.');
        }, 10000); 

    }
});
});

任何建议表示赞赏。

【问题讨论】:

    标签: javascript jquery ajax settimeout cleartimeout


    【解决方案1】:

    timer 变量的作用域是您的 success 函数,因此当您的代码清除旧超时时,它总是 null。将 timer 的声明移到 AJAX 调用之外,它应该可以工作。

    var timer = null;
    
    $.ajax({
        beforeSend: function() { ... },
        success: function(data) {
            if(timer) { clearTimeout(timer) };
            timer = setTimeout(myfunction, 10000); 
        }
    });
    

    【讨论】:

    • 是的,我也试过了,结果还是一样。
    • @user558134 如果这不起作用,您将不得不给我们更多代码,因为没有它,我们没有足够的上下文来知道哪里出了问题。
    • 好的,我发布了更多代码。差不多就是这样。
    • @user558134 该代码应该可以正常工作。必须存在某种在您发布的代码中不明显的其他范围界定问题。
    • 现在运行良好。虽然在我的情况下,我必须在 $(form).submit(); 之外的代码中定义两个级别的计时器;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多