Предложите способ обновлять время каждую минуту - PullRequest
3 голосов
/ 13 января 2012

У меня есть полное приложение AJAX.Я использую приведенный ниже код для обновления времени каждую минуту.Но если я держу браузер открытым в течение> 10 минут, браузер перестает отвечать на запросы / медленно.Предложите лучший код.

function tick()
{
    var d = new Date();
    var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2);
    $('#WeatherBoLfTime').html(' '+time);
    t = setInterval('tick()',60000);
}

$(document).ready(function(){
    tick();
})

Ответы [ 4 ]

7 голосов
/ 13 января 2012

Проблема в том, что вы звоните setInterval много раз и никогда не очищаете ни одного из них. Таким образом, через некоторое время у вас будет много интервальных обратных вызовов, запущенных примерно в одно и то же время.

Изменить

t = setInterval('tick()',60000);

до

t = setTimeout(tick,60000);

Когда я впервые начал кодировать JavaScript, я отключил веб-сервер Lycos с помощью вызовов AJAX, потому что сделал ту же ошибку: -)

Обратите внимание, что, поскольку вы отображаете фактическое время, вы должны использовать намного более короткий таймер, чем 1 минута. Если я зайду на вашу веб-страницу в 13:42:30, время не будет обновлено до ~ 13: 43: 30. Чтобы синхронизировать его со временем машины, вы, вероятно, захотите установить таймер на 1000.

3 голосов
/ 13 января 2012

setInterval() устанавливает интервал. Вам нужно только настроить его один раз, он будет вызываться каждые 60000 мс автоматически. setTimeout() - это то, что вы должны настраивать каждый раз снова.

2 голосов
/ 13 января 2012

Как уже отмечали другие, вы каждый раз создаете новый интервал. Переместите его за пределы вашей функции.

function tick()
{
    var d = new Date();
    var time = padNumber(d.getHours(),2)+':'+padNumber(d.getMinutes(),2);
    $('#WeatherBoLfTime').html(' '+time);
}

$(document).ready(function(){
    t = setInterval(tick,60000);
})

Edit: я медленный, и другие ответы, кажется, обновляются. Так что этот бесполезен сейчас:)

0 голосов
/ 29 марта 2018

Посмотрите ниже демонстрационный код, который будет обновляться каждую секунду ...

<!DOCTYPE html>
<html>
<head>
	<title>j</title>
	<script type="text/javascript">

   function myFunction() 
   {
       setInterval(function(){ 
            var d = new Date(); 
            document.getElementById("dates").innerHTML = new Date(d.getTime());}, 1000);
   }
			
	</script>
</head>
<body>
	<input type="button" name="e" onclick="myFunction()">
	<p id= "dates">ok</p>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...