Javascript setTimeOut/setInterval只运行一次
我使用函数App.loadTo在任何地方加载一些数据。我需要一个延迟,然后再显示任何内容(使用表单样式器插件,重新绘制表单)。我尝试了setTimeout和setInterval函数,但它们只运行一次,即 1) 调用App.loadTo(params)-延迟有效 2) 使用相同的参数调用App.loadTo(params)-延迟不起作用 我尝试了下列方法,但没有成功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
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("i/preloader.gif") 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,但不要清除它。。。