imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
![]()
Народ!
Расскажите мне как эта хрень работает, и что нужно сделать? Я так понимаю, что когда юзер обращается на веб-сервер тот организовывает сессию (поток) и закрывает его тогда, когда полностью ответил пользователю (переслал страничку например). А если пользователь обратился к серверу (передал данные какие-то) и тот должен показать страничку с ходом выполнения (в процентах). В данном случае, я так понимаю, после передачи странички сессия не закрывается, а закрывается когда полностью процесс выполнен. Как в таком случае мне заставить браузер (а может и сервер) обновлять страничку через какое-то время (например каждые 5 сек.)? Спасибо. |
![]() |
# 2 |
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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 |
![]() |
![]() |
# 3 |
Guest
Сообщения: n/a
|
Меня собственно не сам прогресс бар интересует и в общем-то и не загрузка страницы... Допустим сервер должен что-то сделать, например переписать с одного места пачку файлов в другое. Пользователь обращается на ссылку и сервер принимается за работу, а впроцессе работы скидывает в браузер странички, отражающие ход выполнения (выполнено то-то...). Я знаю что в ХТМЛ-е есть какие-то теги, указывающие время перезагрузки. Но тогда возникает вопрс, а как сервер пределяет что это именно тот юзер (без куков). Выходит сервер сессию не закрывает, а как-то постянн скидывает страницы. Так вот меня интересует сам механизм и какую страницу (какие тэги) должен сервак передавать?
![]() |
![]() |
# 4 |
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Himan
Это можно легко сделать в рамках _одной_ страницы. По мере выполнения задачи сервер будет выдавать html-код на страницу, который так же постепенно будет на ней появляться. К примеру, если на пхп это делать: PHP код:
А если тебе нужно именно на _нескольких_ страницах последовательно прогресс показать - то тут выход один - разбивать скрипт на несколько скриптов.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
![]() |
![]() |
# 5 |
МОД-Оператор ЭВМ
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
2 Saruman: Браузер с таких случаях часто выходит на таймаут (для IE - 60 сек. по умолчанию).
PS: А делается все предельно просто. И способов хватает. Самый простой из них (HTML/JS/DOM) это скрытый auto-refresh фрейм. Из него основная страница и считывает те самые проценты (или другие единицы), на основании которых рисуется полоска (если она вообще рисуется). |
![]() |
![]() |
# 6 |
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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 |
![]() |
![]() |
# 9 |
Guest
Сообщения: n/a
|
пишем так:
PHP код:
|
![]() |
# 10 |
::VIP::
Регистрация: 13.08.2003
Адрес: Москва
Сообщения: 1 137
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Код:
<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) |
![]() |
![]() |
# 11 |
Guest
Сообщения: n/a
|
и что должно происходить? я пока вижу только ошибки в броузере, жалобы на отсутствие обьектов и прочую дрянь...
![]() Добавлено через 1 минуту: хоть бы комментировал как-то..... представляешь я щас кусок кода в 30 кб сюда всуну и скажу, что работает, как к этому отнесуться? одно дело, если он действительно работает, и всем влом в нем ковыряться, а другое - если нет. |
![]() |
# 16 |
Full Member
Регистрация: 16.09.2003
Сообщения: 793
![]() ![]() ![]() ![]() ![]() |
да нет вроде он в зависимоти от прогресса загрузки картинок кажет
но не проверял Добавлено через 47 минут: нет всётаки он не отражает действительный статус загрузки картинок.. а жаль.. что не прошол испытаний... может подправит кто.. |
![]() |