imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 31.12.2003, 12:30     # 1
Himan
Guest
 
Сообщения: n/a

Question Странички отражающие процесс

Народ!
Расскажите мне как эта хрень работает, и что нужно сделать?
Я так понимаю, что когда юзер обращается на веб-сервер тот организовывает сессию (поток) и закрывает его тогда, когда полностью ответил пользователю (переслал страничку например). А если пользователь обратился к серверу (передал данные какие-то) и тот должен показать страничку с ходом выполнения (в процентах). В данном случае, я так понимаю, после передачи странички сессия не закрывается, а закрывается когда полностью процесс выполнен. Как в таком случае мне заставить браузер (а может и сервер) обновлять страничку через какое-то время (например каждые 5 сек.)?

Спасибо.
 
Старый 31.12.2003, 13:39     # 2
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
Himan
Имхо, на html/dhtml ты такого не сделаешь. Везде, где я видел разного розда реализации, суть была в том, что просто вешалась анимированная гифка с прогресс баром, которая после загрузки заменялась на реальные загруженные данные. Сделать это можно с помощью двух div-ов, но, естественно, этот прогресс бар реальный прогресс загрузки не отображает.
Реальные же счетчики я видел только реализованные на флеше.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 31.12.2003, 15:13     # 3
Himan
Guest
 
Сообщения: n/a

Меня собственно не сам прогресс бар интересует и в общем-то и не загрузка страницы... Допустим сервер должен что-то сделать, например переписать с одного места пачку файлов в другое. Пользователь обращается на ссылку и сервер принимается за работу, а впроцессе работы скидывает в браузер странички, отражающие ход выполнения (выполнено то-то...). Я знаю что в ХТМЛ-е есть какие-то теги, указывающие время перезагрузки. Но тогда возникает вопрс, а как сервер пределяет что это именно тот юзер (без куков). Выходит сервер сессию не закрывает, а как-то постянн скидывает страницы. Так вот меня интересует сам механизм и какую страницу (какие тэги) должен сервак передавать?
 
Старый 31.12.2003, 15:58     # 4
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
Himan
Это можно легко сделать в рамках _одной_ страницы. По мере выполнения задачи сервер будет выдавать html-код на страницу, который так же постепенно будет на ней появляться. К примеру, если на пхп это делать:
PHP код:
echo "<html><body>Start<br>";
flush();
myLongFunction();
echo 
"Function 1 complete<br>";
flush();
myLongFunction2();
echo 
"Function 2 complete<br>";
flush();

... 
etc... 
Возможно, если поставить в начале на страницу div и потом выдавать js-код, который будет содержимое этого дива изменять - можно сделать такие сообщения и не последовательно показываемыми, а меняющимися в одном месте, но сам я такое не пробовал делать, если есть желание - вперед.

А если тебе нужно именно на _нескольких_ страницах последовательно прогресс показать - то тут выход один - разбивать скрипт на несколько скриптов.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 01.01.2004, 17:31     # 5
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
2 Saruman: Браузер с таких случаях часто выходит на таймаут (для IE - 60 сек. по умолчанию).

PS: А делается все предельно просто. И способов хватает. Самый простой из них (HTML/JS/DOM) это скрытый auto-refresh фрейм. Из него основная страница и считывает те самые проценты (или другие единицы), на основании которых рисуется полоска (если она вообще рисуется).
RaZEr вне форума  
Старый 01.01.2004, 19:40     # 6
Saruman
::VIP::
 
Аватар для Saruman
 
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285

Saruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman ГуруSaruman Гуру
RaZEr
Если что-то в него выдавать периодически - не выходит. У меня так логи процессов по 20-30 минут спокойно работали, постоянно что-то выдавая в браузер. Под IE. Насчет других браузеров - не знаю.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Saruman вне форума  
Старый 01.01.2004, 21:18     # 7
Stasik
Registered User
 
Аватар для Stasik
 
Регистрация: 27.03.2002
Адрес: дома
Сообщения: 1 660

Stasik Известность не заставит себя ждатьStasik Известность не заставит себя ждать
Saruman
это зависит от типа стрима...... и от настроек
__________________
Всё будет хорошо!
Stasik вне форума  
Старый 02.01.2004, 11:58     # 8
Himan
Guest
 
Сообщения: n/a

Спасибо за отзывы, но не могли бы вы мне накалякать пару примеров. Дело в том, что я не большой спец в ХТМЛ и ДжСкрипте. Вот например итересен пример с логами.
 
Старый 02.01.2004, 14:44     # 9
AleXXXSoft
Guest
 
Сообщения: n/a

пишем так:
PHP код:
echo "<input type=text size=6 id=test name=test>";
echo 
"<script language=javascript>";
for(
$i=0;$i<100000;$i++){
echo 
"test.value='".$i."';\n";
flush();
};
echo 
"</script>"
получаем обновляющийся текстбокс, в то самое время пока страница грузится, в конце например, после загрузки можно сделать типа рефрешь куда-нить и т.д.
 
Старый 02.01.2004, 15:08     # 10
Makc
::VIP::
 
Аватар для Makc
 
Регистрация: 13.08.2003
Адрес: Москва
Сообщения: 1 137

Makc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc Гуру
Код:
<html>
<head>
<title>JavaScript - LoadingBar</title>

<!-- HEAD START HERE -->

<style type="text/css">
#divLoadCont {position:absolute; z-index:500; left:0px; top:0px; width:100%; height:98%; clip:rect(0px 100% 100% 0px); background-color:#ffffff; layer-background-color:#ffffff;}
#divLoad1    {position:absolute; layer-background-color:silver; background-color:silver;}
#divLoad2    {position:absolute; left:0px; top:0px; layer-background-color:navy; background-color:navy;}
#divLoadText {position:absolute; background-color:transparent; font-family:arial,helvetica,sans-serif; color:navy; font-size:14px;} 
</style>
<script language="JavaScript" type="text/javascript">
/**********************************************************************************   
LoadingBar 
*   Copyright (C) 2001 Thomas Brattli
*   This script was released at WOscripts.com
*   Visit for more great scripts!
*   This may be used and changed freely as long as this msg is intact!
*   We will also appreciate any links you could give us.
*********************************************************************************/

function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=this.agent.indexOf("Opera 5")>-1
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
	return this
}
var bw=new lib_bwcheck()



/*VARIABLES TO SET START: */
numImages = 10    //How many images you have in your page
loaderWidth = 300 //The width of the loadbar
/*
All other settings, like colors fonts and stuff like that you
have to change in the STYLE section.

IMPORTANT:
To make this actually show the correct results
you have to place THIS code in all images:
onload="loadIt(1)"

Which means that your image should look 
something like this:
<img src="whatever.gif" width="10" border="0" height="10" onload="loadIt(1)">


VARIABLES TO SET END: */



// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

currentImg = 0
//Document size object ********
function lib_doc_size(){ 
  this.x=0;this.x2=bw.ie && document.body.offsetWidth-20||innerWidth||0;
  this.y=0;this.y2=bw.ie && document.body.offsetHeight-5||innerHeight||0;
  if(!this.x2||!this.y2) return message('Document has no width or height') 
  this.x50=this.x2/2;this.y50=this.y2/2;
  return this;
}

//Lib objects  ********************
function lib_obj(obj,nest){ 
  nest=(!nest) ? "":'document.'+nest+'.'
  this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;	
  this.css=bw.dom||bw.ie4?this.evnt.style:this.evnt; 
  this.ref=this.css
  this.w=this.evnt.offsetWidth||this.css.clip.width||
    this.ref.width||this.css.pixelWidth||0; 
  return this
}
//Moving object to **************
lib_obj.prototype.moveIt = function(x,y){
  this.x=x; this.y=y; this.css.left=x+px; this.css.top=y+px;
}
//Clipping object to ******
lib_obj.prototype.clipTo = function(t,r,b,l,setwidth){ 
  this.ct=t; this.cr=r; this.cb=b; this.cl=l
  if(bw.ns4){
    this.css.clip.top=t;this.css.clip.right=r
    this.css.clip.bottom=b;this.css.clip.left=l
  }else{
    if(t<0)t=0;if(r<0)r=0;if(b<0)b=0;if(b<0)b=0
    this.css.clip="rect("+t+"px "+r+"px "+b+"px "+l+"px)";
    if (setwidth){
		this.css.pixelWidth = r;
		this.css.pixelHeight = b;
		this.css.width = r+px; 
		this.css.height = b+px;
	}
  }
}
var oLoad2
function startLoading(){
  page = new lib_doc_size()
  oLoadCont = new lib_obj('divLoadCont')
  oLoad = new lib_obj('divLoad1','divLoadCont')
  oLoad2 = new lib_obj('divLoad2','divLoadCont.document.divLoad1')
  oLoadText = new lib_obj('divLoadText','divLoadCont.document.divLoad1')
  oLoad.moveIt(page.x50-loaderWidth/2,page.y50-20)
  oLoadText.moveIt(loaderWidth/2 - oLoadText.w/2,10)
  oLoad.clipTo(0,loaderWidth,40,0,1)
  oLoad2.per = loaderWidth/numImages
}
function loadIt(ok){
  currentImg ++
  if (oLoad2) oLoad2.clipTo(0,oLoad2.per*currentImg,40,0,1)
  if (!ok){
    oLoadCont.css.visibility = "hidden"
    oLoadCont = null;
	oLoad1 = null;
	oLoad2 = null;
  }
}

//DISPLAY FUNCTION - DELETE START -------- DELETE THIS *************
//LEAVE THIS FUNCTION WHILE TESTING. DELETE WHEN READY
function loadIt_display(ok){
  currentImg ++
  if (oLoad2) oLoad2.clipTo(0,oLoad2.per*currentImg,40,0,1)
  if (currentImg<=numImages) setTimeout("loadIt_display(1)",200)
  else{
    oLoadCont.css.visibility = "hidden"
  }
}
//DISPLAY FUNCTION - DELETE END *************************************
</script>

<!-- HEAD END HERE -->




</head>
<body bgcolor="#737994" text="#FFFFFF" link="#FFFFFF" topmargin="0" leftmargin="0">



<!-- BODY START HERE -->


<!-- ALWAYS HAVE THIS RIGHT AFTER THE BODY START TAG -->
<div id="divLoadCont">
  <div id="divLoad1">
    <div id="divLoad2"></div><br>

    <div id="divLoadText">Loading...</div>
  </div>
</div>
<script>
startLoading()
//onload=loadIt; //- LEAVE THIS LINE WHILE TESTING. UNCOMMENT WHEN READY
loadIt_display(1) //LEAVE THIS LINE WHILE TESTING. DELETE WHEN READY
</script>


<!-- BODY END HERE -->

<br><br><br>
<center>
Содержание страницы
<br><br>
</center>
</body>
</html>
__________________
Makc aka Maximus (on other boards)
Makc вне форума  
Старый 02.01.2004, 15:16     # 11
AleXXXSoft
Guest
 
Сообщения: n/a

и что должно происходить? я пока вижу только ошибки в броузере, жалобы на отсутствие обьектов и прочую дрянь...

Добавлено через 1 минуту:
хоть бы комментировал как-то..... представляешь я щас кусок кода в 30 кб сюда всуну и скажу, что работает, как к этому отнесуться? одно дело, если он действительно работает, и всем влом в нем ковыряться, а другое - если нет.
 
Старый 02.01.2004, 21:13     # 12
Stasik
Registered User
 
Аватар для Stasik
 
Регистрация: 27.03.2002
Адрес: дома
Сообщения: 1 660

Stasik Известность не заставит себя ждатьStasik Известность не заставит себя ждать
мда.... мне даже в облом его в хтмл скопировать
__________________
Всё будет хорошо!
Stasik вне форума  
Старый 02.01.2004, 21:49     # 13
shuron
Full Member
 
Аватар для shuron
 
Регистрация: 16.09.2003
Сообщения: 793

shuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царстве
да в глазах рябит... от таких скриптов с непонятных страниц
shuron вне форума  
Старый 03.01.2004, 20:47     # 14
Makc
::VIP::
 
Аватар для Makc
 
Регистрация: 13.08.2003
Адрес: Москва
Сообщения: 1 137

Makc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc Гуру
Это мне попалось за пару чаоос до того, как я эту тему увидел. Явоский програссбар пробегает, после чего отображается страница.
__________________
Makc aka Maximus (on other boards)
Makc вне форума  
Старый 04.01.2004, 06:00     # 15
AleXXXSoft
Guest
 
Сообщения: n/a

т.е. он просто так пробегает)) для понту, мол, типа грузимся+) что -то типа первого прогресс бара в инсталлшилде 99-м =) сразу так от 0 до 99% а дальше висюк=)
 
Старый 04.01.2004, 14:48     # 16
shuron
Full Member
 
Аватар для shuron
 
Регистрация: 16.09.2003
Сообщения: 793

shuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царствеshuron Луч света в тёмном царстве
да нет вроде он в зависимоти от прогресса загрузки картинок кажет
но не проверял

Добавлено через 47 минут:
нет всётаки он не отражает действительный статус загрузки картинок..
а жаль.. что не прошол испытаний...
может подправит кто..
shuron вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:29.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.