Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeOut/setInterval只运行一次_Javascript_Jquery_Ajax_Settimeout - Fatal编程技术网

Javascript setTimeOut/setInterval只运行一次

Javascript setTimeOut/setInterval只运行一次,javascript,jquery,ajax,settimeout,Javascript,Jquery,Ajax,Settimeout,我使用函数App.loadTo在任何地方加载一些数据。我需要一个延迟,然后再显示任何内容(使用表单样式器插件,重新绘制表单)。我尝试了setTimeout和setInterval函数,但它们只运行一次,即 1) 调用App.loadTo(params)-延迟有效 2) 使用相同的参数调用App.loadTo(params)-延迟不起作用 我尝试了下列方法,但没有成功 tmp = setInterval(function() { consol

我使用函数App.loadTo在任何地方加载一些数据。我需要一个延迟,然后再显示任何内容(使用表单样式器插件,重新绘制表单)。我尝试了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);
        }
    });
};
App.loadTo=函数loadTo(参数){
$.ajax({
url:'/'+params.controller+'/'+params.action+',
键入:“POST”,
数据类型:“json”,
数据:params.sentData,
成功:功能(服务器应答,文本状态){
if(server_answer.result==“success”){
if(params.hasOwnProperty('parseHtml')){
//数据解析
var html=$(server_answer.html);
html=$(html).find(params.parseBlock);
}否则{
var html=$(server_answer.html);
}
//插入数据
$(params.where).empty().html(html).css({
“可见性”:“隐藏”
}).在('')之前;
//显示前延迟
setTimeout(函数(){
log('I show all invisible!',params.where);
$(参数where).css({
“可见性”:“可见”
});
$(“#预加载”).remove();
}, 110);
}否则{
警报\u jq\u用户界面(服务器\u应答.错误\u txt);
}
},
错误:函数(xhr、errmsg、err){
警报jq\u用户界面(xhr、errmsg、err);
}
});
};

尝试使用clearTimeout()清除setTimeout;如果您选择使用该方法,或者如果您更想尝试setinterval方法,请尝试在其外部清除它,我希望这会有所帮助

我创建了一个小提琴,简化了您的代码

这里最大的区别是:

var App = {

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

}

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

setTimeout()
只运行一次。OP的意思是:当第二次调用函数时,不会触发interval。但是逻辑问题。不,它会一直运行,直到
clearInterval(varThatYouAssign\u setInterval)。110毫秒算不了什么,一秒钟有1000毫秒。@PHPglue。。。马上!!你的问题很难理解。您希望计时器什么时候停止运行?如果使用
setInterval
,如果需要满足某个条件,则需要在清除之前将
clearInterval
包装在条件检查中。对于setTimeout,您需要调用另一个timeout。如果您总是希望它在后台运行,请使用setInterval,但不要清除它。。。