setTimeOut / setInterval只运行一次

时间:2014-09-19 20:59:46

标签: javascript jquery ajax settimeout

我使用函数App.loadTo在任何地方加载一些数据。在显示任何内容之前我需要延迟(使用form-styler插件,重绘表单)。我尝试了setTimeout和setInterval函数,但它们只运行一次,即

1)被称为App.loadTo(params) - 延迟工作

2)用相同的参数调用App.loadTo(params) - 延迟不起作用

我尝试了以下但没有成功

            tmp = setInterval(function() {
                console.log('I show all invisible!', params.where);
                $(params.where).css({
                    'visibility': 'visible'
                });
                $('#preloader').remove();
                clearInterval(tmp);
            }, 110);

我在哪里弄错了?

App.loadTo = function loadTo(params) {
    $.ajax({
        url: '/' + params.controller + '/' + params.action + '',
        type: 'POST',
        dataType: 'json',
        data: params.sentData,
        success: function(server_answer, textStatus) {
            if (server_answer.result == 'success') {
                if (params.hasOwnProperty('parseHtml')) {
                    // Data parsing
                    var html = $(server_answer.html);
                    html = $(html).find(params.parseBlock);
                } else {
                    var html = $(server_answer.html);
                }

                // Inserting data
                $(params.where).empty().html(html).css({
                    'visibility': 'hidden'
                }).before('<div id="preloader" style="width: 100%; background: url(&quot;i/preloader.gif&quot;) no-repeat scroll 50% center transparent; min-height: 140px; height: 100%;"></div>');

                // Delay before display
                setTimeout(function() {
                    console.log('I show all invisible!', params.where);
                    $(params.where).css({
                        'visibility': 'visible'
                    });
                    $('#preloader').remove();
                }, 110);
            } else {
                alert_jq_ui(server_answer.error_txt);
            }
        },
        error: function(xhr, errmsg, err) {
            alert_jq_ui(xhr, errmsg, err);
        }
    });
};

2 个答案:

答案 0 :(得分:0)

尝试使用clearTimeout()清除setTimeout;如果您选择使用它,否则如果您想尝试setinterval方法,请尝试将其清除,我希望这有帮助

答案 1 :(得分:0)

我创建了一个小提琴,剥离了你的代码...... http://jsfiddle.net/gnsnvjtz/

这里的最大区别是:

var App = {

     loadTo: function () {
       ///loadTo code goes here ...
     }

}

而不是`App.loadTo = function loadTo(params)...