如果用户计算机上的系统时钟看起来如此,我正在考虑一个每分钟刷新一次的时钟。 11:08:00,它会刷新和11:09:00等。
我试过setInterval()
:
setInterval(function(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
}
})
}, 60000);
但它在页面加载后每分钟重新加载。
有没有解决方案?
答案 0 :(得分:4)
setInterval()
不会立即调用它的函数,在这种情况下第一次运行函数将在页面加载后60秒。您可以进行以下更改以获得您正在寻找的结果:
setTimeout()
的成功函数中使用.ajax()
,而不是setInterval()
围绕整个事件。如果请求出现错误,则setInterval()
会继续执行,但setTimeout()
不会再次请求,直到请求成功为止。.time
中的结果不同,请更改它。这假定result
是11:08:00
function update(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
var secondless = result.split(':'), $time = $('.time');
secondless = secondless [0]+':'+secondless [1];
$time.html(function(_,v){
return secondless != v ? secondless : v
}
setTimeout(update, 1000);
}
})
}
update();
答案 1 :(得分:3)
试试这段代码:
var interval = 0;
function start(){
setTimeout( function(){
ajax_function();
interval = 60;
setInterval( function(){
ajax_function();
}, interval * 1000);
}, interval * 1000);
}
function ajax_function(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
}
});
}
$( window ).load(function(){
var time = new Date();
interval = 60 - time.getSeconds();
if(interval==60)
interval = 0;
start();
});
答案 2 :(得分:2)
var d = new Date();
var n = d.getSeconds();
while(n != 0){
d = new Date();
n = d.getSeconds();
if(n == 0){
setInterval(function(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
}
})
}, 60000);
}
}
答案 3 :(得分:2)
如果你想根据用户系统时间准确地运行你的函数,那么你需要实例化Date time对象并检查getSeconds()的当前状态,如果它等于0,那么你就是分钟,如果不是,你需要从60减去它的结果,然后将它传递给setTimeout,它将在分钟上完全调用setInterval函数。
原油示例;
var time = new Date();
var timeout = 0;
if ( time.getSeconds() != 0 ) {
timeout = (60 - time.getSeconds());
}
setTimeout(function(){
setInterval( function(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
}
})}, 60000);
}, timeout);
代码高尔夫球手的替代示例;
setTimeout(function(){
setInterval( function(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
}
})}, 60000);
}, (60 - new Date().getSeconds()) );
答案 4 :(得分:1)
user2703250几乎是正确的,请参阅下面的编辑版本:
var d = new Date();
var n = d.getSeconds();
while(n !== 0){
d = new Date();
n = d.getSeconds();
if(n === 0){ dopage_update();}
}
function dopage_update(){
$.ajax({
url: "../time.php",
context: document.body,
success: function(result){
$('.time').html(result);
setTimeout(function(){dopage_update();}, 60000);
}
});
}
答案 5 :(得分:0)
如果我理解正确,您可以在第一次运行操作时检查时钟,并在时钟到达下一个seTimeout
时使用setInterval
准确触发hh:mm:00
。