Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обновление (https://javascript.ru/forum/misc/1111-obnovlenie.html)

SerferJS 23.03.2008 13:17

Обновление
 
Подскажите как сделать так, что бы страница автоматически обновлялась через определённый промежуток времени, но только 1 раз.

Dmitry A. Soshnikov 23.03.2008 14:08

SerferJS, погуглите:

- top.location.href (href не обязательно), например top.location = 'javascript.ru', также посмотрите метод reload() для этого объекта

- window.setTimeout(функцияДляВыполнения, интервалВМиллисекундах)

FTDeBUGgeR 23.03.2008 16:06

Записывай факт обновления в куки, а дальше как написано выше

SerferJS 24.03.2008 09:02

Если вас не затруднит. Напишите это готовым кодом. Дело в том, что я не очень знаком с JS, в основном php.

FTDeBUGgeR 24.03.2008 17:58

так, на скорую руку:

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)) ;
}
}
return "";
}

if (getCookie("somename")!="upd") setTimeout("document.location.href=document.locati on.href",5000);
setCookie("somename","upd",1);

Dmitry A. Soshnikov 24.03.2008 20:21

FTDeBUGgeR,
Цитата:

Сообщение от FTDeBUGgeR
document.location.href=document.location.href

IE не обновит так локейшн, считая прежним. Для фикса можно добавить пустую строку: top.location = '' + top.location; или использовать метод reload(), т.к. предыдущий метод будет бессилен, если локейшн содержал якорь.

FTDeBUGgeR 24.03.2008 20:33

Спасибо, буду знать

SerferJS 24.03.2008 23:14

Огромное спасибо за код. А насчёт испарвлений: добавления пустой строки или использования метода reload() это как? Пустую строку: top.location = '' + top.location; как я понял просто добавить в код, а вот с reload() я без понятия. Исправте пожалуйста.

Dmitry A. Soshnikov 25.03.2008 11:38

top.location.reload();

SerferJS 25.03.2008 22:34

Код выглядит так:
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1)
c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)) ;
}
}
return "";
}

if (getCookie("somename")!="upd") setTimeout("document.location.href=document.locati on.href",5000);
setCookie("somename","upd",1);
top.location = '' + top.location;
top.location.reload();
Загрузка страницы не происходит. начинается сразу что-то вроде постоянного обновления или просто нежелания дальше грузить страницу. Может тут заменять надо было что. Но я без понятия, а все варианты перепробовать врятли получится. Подскажите как исправить. А то в JS я совсем не силён.

Андрей Параничев 25.03.2008 22:51

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1)
c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)) ;
}
}
return "";
}

if (getCookie("somename")!="upd") setTimeout(function() {
    setCookie("somename","upd",1);
    top.location.reload();
}, 5000);

SerferJS 26.03.2008 14:35

Что-то не обновляет страницу. Там где 5000 я понимаю время через которое должно произойти обновление. Так я ставлю 5 секунд, ничего не происходит.

Андрей Параничев 26.03.2008 15:51

SerferJS,
Странно, у меня работает, щас проверю в других браузерах. 5000 - это время в миллисекундах, т.е 5 с = 5000 мс.

SerferJS 26.03.2008 23:43

И при 5000 тоже не работает. У меня Opera 9.0. Я скрипт вставляю и в самое начало страницы, и позже, и после php кода, всё равно не работает.

SerferJS 27.03.2008 09:04

Вчера вставил скрипт в начало страницы. Поставил время 3000. В результате при первой загрузке страницы она вроде как обновилась, я даже толком заметить не успел. Но потом сколько не загужаешь, ничего не происходит. Причём проверил в Opere и IE. Везде одинаково. И как тогда сделать, чтобы после очередного открытия страницы она всё же обнавилась?

tenshi 27.03.2008 10:22

rfc2616

SerferJS 27.03.2008 12:44

Цитата:

Сообщение от tenshi
rfc2616

Это что?

Андрей Параничев 27.03.2008 13:30

SerferJS,
У вас cookie, по которой проверяется обновлять/не обновлять ставится на день. Очистите куки и проверьте работоспособность снова.

SerferJS 27.03.2008 17:26

А как сделать так, чтобы они удалялись почти сразу после обновления? Что изменить в коде? Заменить expiredays? Скажите как правильно будет. Допустим надо сделать так, чтобы обновление страницы происходило почти сразу после её открытия. Думаю хватит 1 секунды. А потом, если через 10 секунд или 30 секунд я попадал на эту страницу и она опять обнавлялась 1 раз.

Dmitry A. Soshnikov 27.03.2008 18:09

SerferJS, вообще не надо ставить куки (просто Вас не так поняли, подумали, что надо вообще только один раз перезагрузить). Повесьте на событие onload элемента body функцию рефреша по таймауту.

<body onload="window.setTimeout(function() {top.location.reload(); return true;}, 5000)">

SerferJS 28.03.2008 00:45

Как раз таки правильно поняли. Мне не надо, чтобы страница всё время обновлялась. Мне надо только 1 раз и всё. Только загрузка страницы происходить может в разные промежутки времени: хоть раз в день, хоть каждые 5 секунд.
Вопросы с предыдущего моего сообщения остаются открытыми.
З.Ы. А вообще большое спасибо всем кто помогает разобраться с этим. Было бы проще, если бы я знал JS, но к сожелению сейчас совсем нет времени на его изучение.

tenshi 28.03.2008 10:20

зачем тебе нужно это обновление?

SerferJS 28.03.2008 11:09

Что бы скрипт на пхп выполнялся заново, если попасть на страницу во второй раз. Чтобы все переменные обнулялись.

Dmitry A. Soshnikov 28.03.2008 12:51

SerferJS,

Цитата:

Сообщение от SerferJS
Как раз таки правильно поняли.

нет
Цитата:

Сообщение от SerferJS
Мне не надо, чтобы страница всё время обновлялась. Мне надо только 1 раз и всё. Только загрузка страницы происходить может в разные промежутки времени: хоть раз в день, хоть каждые 5 секунд.

посмотрите предыдущий пост

Dmitry A. Soshnikov 28.03.2008 12:56

SerferJS, а вообще, старайтесь четче формулировать вопросы, потому что вот это:

Цитата:

Сообщение от SerferJS
Что бы скрипт на пхп выполнялся заново, если попасть на страницу во второй раз. Чтобы все переменные обнулялись.

тоже, не пойми что, может значить. Что значит "если попасть на страницу во второй раз, скрипт должен выполняться второй раз"? При первом разе куда-то, сам по себе, записывается признак, что при втором разе не надо скрипт выполнять? =) "Чтобы все переменные обнулялись" - куда они записываются и когда, чтобы потом обнуляться?

SerferJS 28.03.2008 14:12

ds [.code], постараюсь сформулировать попонятнее. В общем так.
Необходимо при КАЖДОЙ загрузке страницы сделать так, чтобы она обновлялась ОДИН раз.
Дело в том, что на странице есть сложный php код, который сохраняет несколько переменный в глобальных массивах, которые нельзя удалять. При выполнении скрипта, после отправки формы на странице, пользователь получает таблицу с результатами на этой же странице. Но даже если перенаправить его на другую страницу, а потом опять на исходную, то глобальные переменные остаются и скрипт не выполняется как надо. Для того чтобы он правильно функционировал, необходимо обновить страницу. Тогда внутри скрипта произойдёт необходимая генерация и выполнение функций, всё переменные обновятся.
Таким образом всё, что мне необходимо это, чтобы вы мне ответили на уже заданные вопросы:
А как сделать так, чтобы cookie удалялись почти сразу после обновления? Что изменить в коде? Заменить expiredays? Скажите как правильно будет. Допустим надо сделать так, чтобы обновление страницы происходило почти сразу после её открытия. Думаю хватит 1 секунды. А потом, если через 10 секунд или 30 секунд я попадал на эту страницу, она опять обнавлялась 1 раз.
Эти вопросы относятся к уже приведённому здесь коду. Помогите пожалуйста.

Dmitry A. Soshnikov 28.03.2008 18:58

SerferJS, упс, пардон, я, конечно же, ошибся с предыдущим кодом =) - там будет постоянно обновляться. Да, надо поставить куки. Алгоритм, примерно, такой: в onload проверяете, если нет куки, то ставим куку и рефрешим, если же кука есть - удаляем (процедура аналогична установки куки, за исключением того, что надо задать просроченный период хранения (expires), например - expires=Thu, 01-Jan-1970 00:00:01 GMT) и не рефрешим.

<body
  onload="
    if (кукаЕсть) {
      удаляемКуку();
      return true;
    }
    ставимКуку();
    делаемРелоад();
  "
>


P.S.: по поводу Вашего "сложного php-кода", я думаю, Вам стоит подумать о переорганизации логики скрипта, а не о уловках типа перезагрузки страницы.

SerferJS 29.03.2008 00:36

ds [.code], если можно, переделай предыдущий код с учётом твоих замечаний, а то сейчас совсем нет времени. Да и я могу напутать что-нить. Потому что в JS я совсем слаб. Ну а если нет, то я сам как-нить попозже разберусь, может быть.
З.Ы. С PHP кодом там пока всё хорошо. Просто очень сложная функциональность и много средств защиты.

SerferJS 02.04.2008 11:27

Что-то не получается у меня.
Помогите вот это:

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1)
c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)) ;
}
}
return "";
}

if (getCookie("somename")!="upd") setTimeout(function() {
setCookie("somename","upd",1);
top.location.reload();
}, 5000);

совместить с этим:

<body
onload="
if (кукаЕсть) {
удаляемКуку();
return true;
}
ставимКуку();
делаемРелоад();
"
>

Переделайте пожалуйста.

tenshi 02.04.2008 11:41

используй тэги [ js ] [ /js ]

Dmitry A. Soshnikov 02.04.2008 12:05

SerferJS,

Цитата:

Сообщение от SerferJS
Что-то не получается у меня.

а что Вы сделали для этого? Скопировали кусок кода Андрей Параничева и кусок моего алгоритмического кода? И что при этом должно получиться?

Попробуйте найти аналогию и действительно поразбираться, потому что писать полностью за Вас никто не будет, если у Вас даже желания нет понять как это работает.

1. if (getCookie("somename")) => if (кукаЕсть);
2. удаляемКуку(); => делаем setCookie(...), expiredays устанавливаем -1;
3. ставимКуку(); => делаем setCookie(...);
4. делаемРелоад(); => top.location.reload();

P.S.: форум - это не то, что, человек пришел и говорит: "ребятки, напишите-ка мне скрипт, да побыстрей, пожалуйста". Как минимум у человека должны быть свои наработки по интересующему вопросу. И конкретно вопрос - где именно и что у него не получается. А на форуме уже подскажут в каком направлении надо двигаться, чтобы решить задачу.

P.S.[2]: это, кстати, и к отвечающим относится - какой смысл выкладывать полностью "от и до" работающий код по первому же запросу "ребята, дайте код". Тем самым вы не поможете человеку, особенно, если при этом у него нет желания самому разобраться, что происходит в этом коде. Я понимаю, что большинство интересует комбинация Ctrl+C (на форуме в готовом коде), Ctrl+V (у себя в редакторе), но это не программирование.

P.S.[3]: однако, я вовсе не против выкладываний полных кодов (и сам часто выкладываю) - иногда это интересно, особенно, если задача интересная. Тут просто важен подход тех, кто просит помочь.

SerferJS 02.04.2008 13:58

Что-то не получается у меня.
Помогите вот это:
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1)
c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)) ;
}
}
return "";
}
 
if (getCookie("somename")!="upd") setTimeout(function() {
    setCookie("somename","upd",1);
    top.location.reload();
}, 5000);


совместить с этим:

<body
onload="
if (кукаЕсть) {
удаляемКуку();
return true;
}
ставимКуку();
делаемРелоад();
"
>

Помогите пожалуйста

SerferJS 02.04.2008 14:02

Я пробовал это соедениять. С учётом условий. Но я вообще не знаю JavaScript! И посему совсем слабо представляю как это сделать.
И только поэтому прошу вас сделать это за меня.
Помогите пожалуйста.
P.S.ds [.code], то что вы написали 4 пункта на которые надо опираться это очень хорошо. Если бы я знал JS, то с радостью разобрался бы.

SerferJS 03.04.2008 17:04

Помогите пожалуйста...


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