Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Постоянное обновление страницы. Как? (https://javascript.ru/forum/misc/1194-postoyannoe-obnovlenie-stranicy-kak.html)

ratt 01.05.2008 23:16

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

Мне нужно, чтобы обратный отсчёт времени шёл в реальном времени.
---------------------------------------------------------------------------
Вот скрипт:
<SCRIPT LANGUAGE="javascript">
today = new Date();
BigDay = new Date("May 13, 2008")
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (BigDay.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60);
document.write("<h3><center>");
document.write( "осталось <br><b>"+daysLeft+"</b> дней,<br> <b>"+hrsLeft+"</b> часов<br><b>"+minsLeft+"</b> минут.");
document.write("</h3></center>");
location.reload()
</SCRIPT>
------------------------------------------------------------------
как сделать, чтобы страница постоянно обновлялась?

Dmitry A. Soshnikov 02.05.2008 00:27

ratt, путаница получилась с обозначение "обновление страницы". Под этим термином обычно понимают рефреш адреса страницы. Вы же, как можно понять, хотите обновлять содержимое страницы.

Вместо document.write(...) используйте обновление свойства innerHTML какого-нибудь контейнера. Например:

<span id="container"></span>


var content = "осталось <br><b>"+daysLeft+"</b> дней,<br> <b>"+hrsLeft+"</b> часов<br><b>"+minsLeft+"</b> минут.";
document.getElementById('container').innerHTML = content;

ratt 02.05.2008 01:11

Как понял, должно получиться нечто подобное:

<HTML><HEAD>
<SCRIPT language=javascript>

function clockon() {

today = new Date();
BigDay = new Date("May 13, 2008")
msPerDay = 24 * 60 * 60 * 1000 ;
timeLeft = (BigDay.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);
e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);
minsLeft = Math.floor((e_hrsLeft - hrsLeft)*60);
var content = "осталось <br><b>"+daysLeft+"</b> дней,<br> <b>"+hrsLeft+"</b> часов<br><b>"+minsLeft+"</b> минут.";
document.getElementById('container').innerHTML = content;
</SCRIPT>
</HEAD>
<BODY onLoad="clockon()">
<SPAN id="container"></SPAN>
</BODY></HTML>
----------------------------
подскажите почему это не рабтает.

Dmitry A. Soshnikov 02.05.2008 02:38

ratt, не первый взгляд - синтаксическая ошибка - функция не закрыта (закрывающей скобки нет "}"). Плюс ко всему, если Вам нужно в реальном времени показывать время (масло маслянное =)), то посмотрите функции:

- setTimeout(функция, мс) - выполняет функцию (первый параметр) по истечении времени (второй параметр, миллисекунды). Выполняет единожды (кроме случае, если функция рекурсивная)

- setInterval(...) - параметры те же, только выполняет функцию периодически

P.S.: на будущее - старайтесь четче задавать вопросы (где именно не работает; работает не правильно или вообще не работает и выдает ошибки и т.д.). Используйте кнопки JS или HTML для подстветки кода.

ratt 02.05.2008 10:07

Спасибо: всё получилось!
 
<HTML><HEAD>
[JS]<SCRIPT language=javascript>

function clockon() {

today = new Date();
BigDay = new Date("May 13, 2008")

msPerDay = 24 * 60 * 60 * 1000 ;

timeLeft = (BigDay.getTime() - today.getTime());
e_daysLeft = timeLeft / msPerDay;
daysLeft = Math.floor(e_daysLeft);

e_hrsLeft = (e_daysLeft - daysLeft)*24;
hrsLeft = Math.floor(e_hrsLeft);

e_minsLeft = (e_hrsLeft-hrsLeft)*60;
minsLeft = Math.floor(e_minsLeft);

e_secLeft = (e_minsLeft-minsLeft)*60;
secLeft = Math.floor(e_secLeft);

var content = "осталось <br><b>"+daysLeft+"</b> дней,<br> <b>"+hrsLeft+"</b> часов<br><b>"+minsLeft+"</b> минут,<br><b>"+secLeft+"</b> секунд";
document.getElementById('container').innerHTML = content;
setTimeout("clockon()", 1000);
}
</SCRIPT>[/JS]</HEAD>
<BODY onLoad="clockon()">
<SPAN id="container"></SPAN>
</BODY></HTML>

S.Viktor 12.10.2010 09:03

Подскажите новичку, как нужно изменить вышеуказанный JS-скрипт, чтобы оставшееся количество дней до указанной даты вычислялось не на локальном компьютере пользователя, а через cgi-запрос на сервере?

DooMer 12.10.2010 11:15

Цитата:

Сообщение от S.Viktor (Сообщение 73913)
Подскажите новичку, как нужно изменить вышеуказанный JS-скрипт, чтобы оставшееся количество дней до указанной даты вычислялось не на локальном компьютере пользователя, а через cgi-запрос на сервере?

нужно добавить AJAX запрос на сервер для получения времени

SilentImp 12.10.2010 11:41

С какого перепугу число дней надо вычислять на сервере?
Оно будет как то отличатся от того которое вы получите на стороне клиента не забрасывая сервер не нужными http запросами?

S.Viktor 12.10.2010 15:23

Цитата:

Сообщение от SilentImp (Сообщение 73931)
С какого перепугу число дней надо вычислять на сервере?
Оно будет как то отличатся от того которое вы получите на стороне клиента не забрасывая сервер не нужными http запросами?

Не обязательно вычисление количества дней - это может быть любая меняющаяся на сервере информация, например, количество новых заявок в базе данных.

SilentImp 13.10.2010 02:55

Тогда все верно ответили: ajax (http://www.w3.org/TR/2010/CR-XMLHttpRequest-20100803/) или websocket (http://www.w3.org/TR/2009/WD-websockets-20091222/) в зависимости от характера данных и частоты их изменения.

p.s. спек не пугайтесь. все что надо для кроссбраузерного использования реализовано в популярных фремворках или в виде отдельных библиотек.


Часовой пояс GMT +3, время: 02:30.