2014-02-14 2 views
3

Я думаю о часах, которые будут обновляться каждую минуту, если системные часы на компьютере пользователя будут выглядеть следующим образом. 11:08:00, он будет обновлять и т.д. 11:09:00AJAX jQuery - обновлять содержимое каждую минуту

Я судимые к setInterval():

setInterval(function(){ 
    $.ajax({ 
     url: "../time.php", 
     context: document.body, 
     success: function(result){ 
      $('.time').html(result); 
     } 
    }) 
}, 60000); 

Но это перегрузочные каждую минуту после загрузки страницы.

Есть ли решение?

+0

изменение 60000 6000 – Merlin

+1

@Lorenzo Нет, это было бы 6 секунд. – George

+1

извините!did not get it – Merlin

ответ

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(); 
}); 
+0

вот что я ищу чувака, ты замечательный – arclite

+0

Рад, что я мог бы помочь ... :) –

4

setInterval() не будет вызывать свою функцию немедленно, при первом запуске функции в этом случае будет 60 секунд после загрузки страницы. Вы можете внести следующие изменения, чтобы получить результат, который вы ищете:

  • Место ваш запрос AJAX в функции
  • Вызов функции, как только страница загрузится
  • Используйте 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(); 
+0

Это все равно каждые 60 секунд с загрузки страницы, а не с минуты на изменение. Вы также можете получить ошибки, введенные к моменту запроса AJAX, чтобы вернуть ответ. –

+0

Я совершенно неправильно понял - странно, как я лучше понял две строки, которые вы написали, а не все описание в самом вопросе. Благодарю. – George

+0

@ AnthonyGrist Edit made. – George

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); 
    } 
} 
+0

Что вы опубликовали? я не понял. – Jai

+0

Ajax будет вызываться только тогда, когда система получит полную минуту. Что-то вроде: , когда время 10:10:59 оно не запустится , когда время 10:11:00 начнется, и каждую минуту будет называться – brunozrk

+0

'setTimeout (обновление, 60000);' что это? и где? или это должно быть скопировано из другого ответа. – Jai

2

Если вы хотите запустить свою функцию точно в минуту в зависимости от системного времени пользователя, вам необходимо создать экземпляр объекта Date time и проверить текущее состояние getSeconds(), если оно равно 0, то вы точно на t он минуту, если нет, вам нужно вычесть его результат из 60, а затем передать это в setTimeout, который будет вызывать функцию setInterval точно в минуту.

Crude example;

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())); 
0

Если я правильно undestood, вы можете проверить с часами в первый раз, когда действие запускается и использовать seTimeout стрелять setInterval точно, когда часы достигает следующего hh:mm:00.

+0

это правильно :) – arclite

1

user2703250 почти получил это право, пожалуйста, см отредактирован verison ниже:

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); 
      } 
      }); 
     } 
+0

это хороший скрипт, но я думаю, что он сгенерирует серверную нагрузку – arclite

Смежные вопросы