Tagi na forum.

Windows 14206 SQL Server 2132
sieci 6796 Windows XP 1922
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

Uruchomienie skryptu JS przy ładowaniu strony

gsawicki 2011-02-27 18:58:38
0
avatar
 
 
Witam.
 
Muszę uruchomić kod JS przy ładowaniu strony aspx.
Chodzi o to, że strona się długo ładuje więc chcę zrobić okienko proszę czekać.
 
Jedyny znany mi sposób to w Page_Load wrzucenie kodu w Response.Write(...) i potem Response.Flush().
Problem jest taki, że ten kod jest wrzucany na początku strony czyli przed Doctype, html i body. Przez to nie działają mi style css (zmieniają się rozmiary czcionki).
 
Czy ktoś ma jakiś sposób na wrzucenie kodu JS od razu na początku ładowania strony, lub jak zrobić aby mój sposób nie rozwalał css'ów?
 
Pozdrawiam
Grzegorz
tagi: css   Html


xRidx  2011-02-27 20:37:21 #1
0
avatar
 
 
Dlaczego wrzuca to Pan na początek strony tego Pan nie wyjaśnił???Może jest inny sposób zaimplementowania Pańskiego kodu JS.

Edytowano 1 raz. Ostatnio 2011-02-27 20:37:37 przez xRidx.
gsawicki  2011-02-27 21:53:10 #1.1
0
avatar
 
 
Witam.
Strona długo się ładuje bo ma dużo obliczeń żeby wyświetlić dane.
Normalnie to tak działa, że się strona otwiera w nowym oknie i jest przez np. 2 minuty biały ekran, potem się pojawia strona. Dlatego na starcie chciałbym wyświetlić informację (a najlepiej pasek postępu), że ładowanie strony w toku i że może potrwać kilka minut.
Wymyśliłem, ze pokażę w Java Script nowe okienko z taką informacją, tylko mam problem z uruchomieniem Java Script na starcie strony.
 
Pozdrawiam
Grzegorz

winkel  2011-02-28 15:28:47 #2
0
avatar s
 
 
Sprawdzałeś w google następującą fraze: "long time operations in asp.net"??--____________ Robert Winkler

____________
Robert Winkler

gsawicki  2011-02-28 17:53:57 #2.1
0
avatar
 
 
Sprawdzałem i pierwszy z brzegu link prowadzi mnie do tego samego czyli do Response.Write ze spanem, potem możemy JS ukryć ten span.
Wszystko ok, ale mam problem z tymi stylami.
Może ktoś mi powie, czy wrzucanie kodu przed doctype jest poprawne? Jeśli tak, to czemu mi się style css sypią (zmieniają się wielkości czcionek) jeśli wrzucę kod przed doctype? Można to jakoś obejść, żeby css działało dobrze?
 
Pozdrawiam
Grzegorz

winkel  2011-03-01 06:58:19 #2.1.1
0
avatar s
 
 
Sprawdzałes w przeglądarce jak wygląda kod tej strony po stronie klienta, czy są tam odwołania do twoich styli? Skoro wpisałeś je w Response.Write przed wykonaniem Flush to powinny tam być, ale może podałeś błędny link. FireBug, dodatem do FireFoxa jest dobry aby wyśledzić tekie problemy. Odpalasz jego panel, ucuchamiasz sledzenie transmisji sieciowej i monitorujesz jakie dane są przesyłane między przeglądarką z serwerem gdy odwołujesz się do tej strony.--____________ Robert Winkler

____________
Robert Winkler

gsawicki  2011-03-01 21:24:44 #2.1.1.1
0
avatar
 
 
Witam.
 
Oto kod strony, który wychodzi jak się robi Response.Write
 
<script type="text/javascript"> //<![CDATA[<!--function hideObject(obj) { obj.style.display = 'none';}// -->//]]></script><div style="position: absolute; top: 50%; left: 50%;" id="splashScreen"><img src="/WebResource.axd?d=rRxNyhZL8Zj_OJ8fP_uaG8w729A2_JhzPi23fQn3kDPV7_J5OIaLxAN5Lr9RahvEsiBjdhUr4oNJ7cneNmtoy7umn50UM67jRQm31yHJSU18Af4GDxu1yIh8Z3u33XiYqGOGzohfr1raOKeomRFSBjycvuc1&t=634222172545000000" alt="busy" />Proszę czekać</div><script type="text/javascript"> //<![CDATA[<!--var splashif(document.getElementById) { splash = document.getElementById('splashScreen');}else if(document.layers) //NS4{ splash = document.splashScreen;}else if(document.all) //IE4{ splash = document.all.splashScreen;}hideObject(splash);// -->//]]></script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head> <title></title>
<style type="text/css"> .style1 { width: 147px; vertical-align:top; margin-left: 160px; } .style2 { font-size: small; } </style> <style type="text/css"> .ctl00_Menu1_0 { background-color:white;visibility:hidden;display:none;position:absolute;left:0px;top:0px; } .ctl00_Menu1_1 { color:#990000;font-family:Verdana;font-size:Small;text-decoration:none; } .ctl00_Menu1_2 { color:#990000;background-color:#FFFBD6;font-family:Verdana;font-size:Small; } .ctl00_Menu1_3 { } .ctl00_Menu1_4 { padding:2px 10px 2px 10px; } .ctl00_Menu1_5 { padding:0px 10px 0px 10px; } .ctl00_Menu1_6 { } .ctl00_Menu1_7 { padding:2px 5px 2px 5px; } .ctl00_Menu1_8 { background-color:#FFFBD6; } .ctl00_Menu1_9 { } .ctl00_Menu1_10 { background-color:#FFCC66; } .ctl00_Menu1_11 { } .ctl00_Menu1_12 { background-color:#FFCC66; } .ctl00_Menu1_13 { color:White; } .ctl00_Menu1_14 { color:White;background-color:#990000; } .ctl00_Menu1_15 { color:White; } .ctl00_Menu1_16 { color:White;background-color:#990000; }</style></head><body> <form name="aspnetForm" method="post" action="ZamowieniaNiezrealizowane.aspx" id="aspnetForm">Jak widać na samym początku jest javascript, potem div z okienkiem proszę czekać, potem znowu javascript, dopiero potem doctype, head i body. W head widać styl cssCo do styli to chyba nie działa tylko rozmiar czcionek, bo reszta typu kolory itp działają. Po prostu jak nie ma spana to czcionka jest mała, a jak span się pojawia, to czcionka się powiększa.PozdrawiamGrzegorz

winkel  2011-03-02 07:20:37 #2.1.1.1.1
0
avatar s
 
 
Jeśli naprawde w google odszukałeś strom stosują to zapytanie: "Long Time Operations in ASP.NET" to napewno jako pierwsza pojawił si cie strona http://www.beansoftware.com/ASP.NET-Tutorials/Long-Operations.aspx, dlaczego wiec nie przyjąłeś do wiadomosci że metoda z javascript i panelem wyswietlającym jakiś komunikat nie jest dla ciebie.
W twoim wypadku zadziała opcja z ajax oraz z dodatkowym wątkiem po stronie serwera. Ładując strone sprawdzasz czy wątek skończył już twoją operacje, jeśli nie to wyświetlasz strone z komunikatem która zawiera znacznik META wymuszający przeładowanie strony to 5, 10 sekundach i tak w kółko do momentu gdy twój wątek skończy prace i wynik będzie gotowy. Wówczas przekierowujesz przeklądarke na właściwą strone prezentującą wynik.
 
W MSDN Magazin był swego czasu artykół jak zastosować to tego Workflow Foundation
http://msdn.microsoft.com/en-us/magazine/dd296718.aspx
Wydaje mi się jednak że jest niczym strzelanie z armaty do wróbla.
Samodzielne napisanie odpowiedniej klasy nadzorującej długotrwałe operacje, kolejkującej i synchronizującej ich wywołania nie powinno trwać dłużej niż godzine.--____________ Robert Winkler

____________
Robert Winkler

gsawicki  2011-03-03 20:35:43 #2.1.1.1.1.1
0
avatar
 
 
OK, mogę spróbować z wątkiem, ale mam wątpliwości jak to zrobić. Oto moja śieżka myślowa:
1. Strona się otwiera i ma być skomplikowane przeliczenie, więc odpalam osobny wątek, aby ściągnął dane.
2. Na stronie ukrywam wszystkie komponenty (chcę aby wszystko było na jednej stronie) i wyświetlam Progress bar.
3. Wątek w session zapisze progress (mam nadzieję, że się session nie zablokuje)
4. Strona będzie się przeładowywać pokazując progress
5. Jak progress będzie 100% to strona po przeładowaniu powinna otrzymać od wątku dane po obliczeniach.
 
Moje pytanie:
Gdzie mam przechować dane z wątku, aby strona mogła się do niego dobić. W session nie mogę, bo moje dane nie są serializowalne. Jakieś inne miejsce?
 
Pozdrawiam.
Grzegorz

winkel  2011-03-04 10:49:32 #2.1.1.1.1.1.1
0
avatar s
 
 
Spróbuj tego:https://github.com/winkel/LongTimeOperation/zipball/masterNapiszałem prostego managera i przykład jak można go użyć.
Bedziesz musiał go troche rozszerzyć jeśli będziesz chciał wykonywać więcej niż jedno zadanie w tej samym czasie, na przykład tyle ile masz procesorów na serwerze (nie warto przekraczać tej wartości)--____________ Robert Winkler

____________
Robert Winkler

Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony