Вход

Просмотр полной версии : Обновление


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.location.href",5000);
setCookie("somename","upd",1);

Dmitry A. Soshnikov
24.03.2008, 20:21
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.location.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
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,

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

Dmitry A. Soshnikov
28.03.2008, 12:56
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,

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

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

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
Помогите пожалуйста...