Autor | Zpráva | ||
---|---|---|---|
zis Profil * |
#1 · Zasláno: 19. 12. 2008, 14:31:11
caute
mam jeden problem. Nacitam ajaxem cca kazdejch 10s nejaky hodnoty z db. Dat moc neni ale vraci mi cast html(nejaky tabulka). Problem je pokud reknu ajaxem o data jednomu scriptu vse je ok data se vypisou, pokud zazadam o data 3 skriptu nevypise se mi nic. Myslim ze z ukazky kodu to bude nazornejsi. kód je nejaky takovy preloadData(1); function preloadData(id) { setInterval("refreshData(id)", 10000); // kazdejch 10 vterin } function refreshData(id) { // pokud je zde jen jedna funkce tak to facha preloadLineUpHome(id); preloadLineUpAway(id); preloadReporting(id); } function preloadReporting() { getData("/online/getreport.php?id=" + id, "online_reportage"); // s jakym skriptem se spojit a } function preloadLineUpHome() { getData("/online/getlineuphome.php?id=" + id, "online_lineup_home"); } function preloadLineUpAway() { getData("/online/getlineupaway.php?id=" + id, "online_lineup_away"); } //vytvoreni objektu a spojeni se skriptem function getData(url,element_id) { if (window.ActiveXObject) { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } httpRequest.open("GET", url, true); httpRequest.onreadystatechange= function () {processRequest(element_id); } ; httpRequest.send(null); } //ziskam hodnoty a ulozim do danyho elementu function processRequest(element_id) { if (httpRequest.readyState == 4) { if(httpRequest.status == 200) { document.getElementById(element_id).innerHTML = httpRequest.responseText; } else { alert("Chyba pri nacitani stanky "+ httpRequest.status +" : "+ httpRequest.statusText); } } Diky za jakekoliv napady a pripominky |
||
DJ Miky Profil |
#2 · Zasláno: 19. 12. 2008, 15:16:08
Pro každý z těch tří požadavků si vytvoř vlastní httpRequest objekt. Takhle ti každé volání přepíše to minulé, takže se provede jen to poslední.
|
||
kajaman Profil |
#3 · Zasláno: 19. 12. 2008, 15:21:28 · Upravil/a: kajaman
v Ajaxu nejsem zrovna odborník, ale když se toho zatím nikdo nechopil....
1, tenhle zápis mi připadá zvláštní: „httpRequest.onreadystatechange= function () {processRequest(element_id); } ;“, spíš by tam mělo být něco jako httpRequest.onreadystatechange= osefujZmenu; a dole potom další funkce: function osefujZmenu () { } 2, ale především myslím, že to máš MOC MOC SLOŽITĚ NAPSANÝ. Máš tam tři různé funkce, které slouží jen k tomu, aby se volala 4. funkce s různými parametry?! |
||
Měsíček Profil |
#4 · Zasláno: 19. 12. 2008, 15:22:44
To co píšeš v bodě [1] je IMHO blbost kajamane.
|
||
kajaman Profil |
#5 · Zasláno: 19. 12. 2008, 15:24:24
Měsíček
jj, je to možný, jen jsem ten jeho zápis nikdy neviděl... jak píšu, Ajaxem zrovna moc nevládnu... |
||
Měsíček Profil |
#6 · Zasláno: 19. 12. 2008, 15:28:39 · Upravil/a: Měsíček
Vyzkoušej si tohle:
<script type="text/javascript"> window.onload = function () { alert(1); }; </script> |
||
kajaman Profil |
#7 · Zasláno: 19. 12. 2008, 15:35:56
hmm, no já myslím, že to je trochu něco jiného. Ty tady definuješ nějakou funkci, která se hned po události taky spustí. V té Ajax metodě onreadystatechange se definuje handler, ale funkce se spouští až při změně stavu toho objektu.
|
||
Leo Profil |
#8 · Zasláno: 19. 12. 2008, 15:48:24
"Ty tady definuješ nějakou funkci, která se hned po události taky spustí. V té Ajax metodě onreadystatechange se definuje handler, ale funkce se spouští až při změně stavu toho objektu."
A jaky je v tom rozdil? onreadystatechange je taky udalost, Leo |
||
kajaman Profil |
#9 · Zasláno: 19. 12. 2008, 15:52:11 · Upravil/a: kajaman
njn, tohle se vykoná hned, že jo?
„window.onload = function () { alert(1); };“ tohle se vykoná, až nastane "readystatechange", ne? „httpRequest.onreadystatechange= osefujZmenu;“ takže myslím, že rozdíl je v tom, že tohle nastavuje vlastnost objektu XMLHttpRequest. |
||
Měsíček Profil |
#10 · Zasláno: 19. 12. 2008, 16:43:26
Ne. To první se vykoná až se načte celá stránka (tedy při události onload) a tam to druhé se vykoná až bude připraven httpRequest. Viz můj příklad (editoval jsem tam ten příspěvek).
|
||
zis Profil * |
#11 · Zasláno: 19. 12. 2008, 18:04:56
Predevsim diky za vsechny odpovedi
„Pro každý z těch tří požadavků si vytvoř vlastní httpRequest objekt. Takhle ti každé volání přepíše to minulé, takže se provede jen to poslední.“ no to se snad vytvari pri kazdym volani ty metody ne? if (window.ActiveXObject) { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } |
||
zis Profil * |
#12 · Zasláno: 19. 12. 2008, 18:15:30
respektive kdyz udelam funkci
function createRequest() { if (window.ActiveXObject) httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); else httpRequest = new XMLHttpRequest(); return httpRequest; } a pak ji volam pro kazdej preload dat function preloadReporting() { getData(createRequest(),"/online/getreport.php?id=" + id, "online_reportage"); } function preloadLineUpHome() { getData(createRequest(),"/online/getlineuphome.php?id=" + id, "online_lineup_home"); } function preloadLineUpAway() { getData(createRequest(),"/online/getlineupaway.php?id=" + id, "online_lineup_away"); } tak taky bez ucinku, je to v podstate to samy, nebo jak si to myslel s vytvarenim tech vlastnich httpRequest objektu |
||
Měsíček Profil |
#13 · Zasláno: 19. 12. 2008, 18:16:59
Hm, tak budu opakovat DJ_Mikyho .. pro každý požadavek si vytvoř nový objekt, jinak když budeš volat pořád ten sám, budou se přepisovat a vypíše se pouze poslední.
|
||
zis Profil * |
#14 · Zasláno: 19. 12. 2008, 18:19:02
hm mno tohle mi moc nepomuze, jak mam teda vytvorit pro kazdej pozadavek novej objekt, myslel sem ze se vytvari v ty metode getData. diky
|
||
Měsíček Profil |
#15 · Zasláno: 19. 12. 2008, 18:25:10
Ano on se vytvoří z názvem "x", ale další funkcí, kterou voláš (get_data()) tak to přepíšeš a jede se nanovo. Co myslíš, že vyhodí alert()?
<script type="text/javascript"> var x = 1; function x_a () { x = 2; } function x_b () { x = 3; } function x_c () { x = 4; } x_a(); x_b(); x_c(); alert(x); // ? </script> |
||
zis Profil * |
#16 · Zasláno: 19. 12. 2008, 18:40:08
jo dik uz to fachci,
Řešení: udelal sem to presne pode Měsíčka dikes |
||
Leo Profil |
#17 · Zasláno: 19. 12. 2008, 20:06:33
kajaman
"njn, tohle se vykoná hned, že jo? „window.onload = function () { alert(1); };“ tohle se vykoná, až nastane "readystatechange", ne? „httpRequest.onreadystatechange= osefujZmenu;“" Oba kody se vykonaji hned :-) ale pokud jde o volani prirazene fce (at uz anonymni, coz je prvni pripad, nebo pojmenovane, coz je druhy pripad) tak ta se vola az (a pokuf vubec) dojde k udalosti. Leo |
||
Časová prodleva: 15 let
|
0