| | |
| Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal sedlák: 08.12.2010 21:25 | |
|
Zdravim, na stranke si cez ajax ziskavam udaje z db a nasledne vypisujem, no mam problem, ze mam 2 divy, kde do jedneho potrebujem udaje z jednej tabulky v sekundovej tarifikacii a do druheho mi staci 10 sekundove obnovovanie...
Tu mam kody:
Kód: function loaduj(){ if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ document.getElementById("change").innerHTML = xmlhttp.responseText; init(); } } var url = "ajax/aukcia_ajax.php"; var params = "idak=<?php echo $id_aukcie; ?>"; xmlhttp.open("GET", url+"?"+params, true); xmlhttp.send(); }
function kliky(){ if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ document.getElementById("klikyyy").innerHTML = xmlhttp.responseText; init(); } } var url = "ajax/aukcia_kliky.php"; var params = "idak=<?php echo $id_aukcie; ?>"; xmlhttp.open("GET", url+"?"+params, true); xmlhttp.send(); }
function init(){ var t = setTimeout("loaduj()",1000); } Na stranke to potom pustam : Kód: <body onload="init()">
<div id="change"> Loading... </div>
<div id="klikyyy"> loading </div>
Uz som to skusal vseliako "kombinovat" aj urobit si funkciu init2 a do body onload to dat tiez, ale nepomohlo... vzdy sla len jedna funkcia, pripadne skakala funkcia loaduj do divu pre funkciu kliky... Ako nato?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 09.12.2010 12:03 | |
|
V podstate je pointa v tom, ze v tele tvojich fcii miesto volania fcie init len prosto zavedies novy timeout, cim obe fcie od seba mozes oddelit a pre kazdu nastavovat osobitny timeout. Ja ti ukazem sposob, ako to zvyknem zapisovat ja. Este by som ta rad upozornil, ze ako prvy argument setTimeoutu pouzivas retazec, co nie je doporucovane - pouzi referenciu na prislusnu fciu.
Kód: setTimeout(function kliky() //fciu som pomenoval { //...sem si dopln lubovolny kod... xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { //...sem tie srandy s innerHTML... setTimeout(kliky, 1000); //tu je pouzite to meno fcie } }; }, 1000); Dobre si vsimni, ako som to zapisal. Tento isty kod potom pouzijes druhykrat s cislom 10000 (je to tam na dvoch miestach), zasa s lubovolnym kodom vnutri.
Ono to pracuje tak, ze sa spusti odpocitavanie jednej sekundy (ten "vonkajsi" setTimeout), spusti sa kod vo function kliky(), na ktoreho konci je zasa prikaz, aby sa pockalo sekundu a rekurzivne sa fcia kliky zavolala, a tak dookola.
Este ta upozornim, ze je tu pouzity operator function a nie prikaz function, preto ten nazov "kliky" nemozes pouzit nikde inde ako vnutri tela samotnej fcie kliky. Vsade inde by ti volanie kliky() vyhodilo vynimku.
Bola by tu v podstate este jedna moznost, a to pouzitie setIntervalu, co by zabezpecilo cyklicke opakovanie tvojho pozadovaneho kodu, ale z dovodov, ktore sa mi nechce momentalne rozpisovat, urcite neodporucam pouzivat setInterval. Keby bol zaujem, nieco poviem aj k tomu, ale myslim, ze ti staci informacia, aby si sa setIntervalu vyhol.
Otazka pomimo - nechces nahodou tieto dve ajaxove volania spustit aj pri nacitani stranky? Totizto v tvojom (a aj mojom) kode sa tieto fcie prvykrat spustia sekundu, resp. desat sekund po otvoreni stranky - ma to tak byt?
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 09.12.2010 16:01 | |
|
Vdaka duri, vyborne vysvetlene, cením si to.
A k tej otazke pomimo, zatial som to riesil tak, ze do divu klikyyy som si dal php script ktory pri nacitani stranky vytiahne udaje z db... A potom ked sa pusti ajax script, tie udaje proste prepise. Asi nie moc stastne riesenie, ale funguje Ak sa ti chce mi to este vysvetlit, nebudem sa tomu branit
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 09.12.2010 16:16 | |
|
Je to dobre riesenie, mozes nechat tak.
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 10.12.2010 19:39 | |
|
Ešte otázočka. Môže byť že mam slabý net / hosting nestíha zobrazovat nove udaje?
Kedze v pc na wampe mi to ide ako má?
A občas sa stane že sa do divu klikyyy hodia informacie ktore maju byt v dive change? Občas sa to obnovi samo, obcas az po F5...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 10.12.2010 19:42 | |
|
To prve sa stat moze, to druhe urcite nie. Daj odkaz na zivu ukazku, nech sa pozriem.
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 05.01.2011 23:53 | |
|
Takze zase som sa do toho pustil a nie a nie to ist...
Link: http://aukcia.dobrestranky.eu/index.php?page=aukcia&idak=6
Po určitom čase sa bud zastavi cas alebo prestane sa aktualizovat zoznam klikov. Ved skuste si to, login/heslo : fero/fero
+ obcas stale skoci odpocitavanie do divu pre historiu klikov alebo naopak
Tu mam kod:
Kód: setTimeout(function loaduj() { if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ document.getElementById("change").innerHTML = xmlhttp.responseText; setTimeout(loaduj, 1000); } } var url = "ajax/aukcia_ajax.php"; var params = "idak=<?php echo $id_aukcie; ?>"; xmlhttp.open("GET", url+"?"+params, true); xmlhttp.send(); }, 1000);
setTimeout(function kliky() { if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ document.getElementById("klikacka").innerHTML = xmlhttp.responseText; setTimeout(kliky, 3000); } } var url = "ajax/aukcia_kliky.php"; var params = "idak=<?php echo $id_aukcie; ?>"; xmlhttp.open("GET", url+"?"+params, true); xmlhttp.send(); }, 3000);
Spustam to sposobom body onload="loaduj(); kliky();"
Ked nastavim timeout oboch funkcii na 1000, funkcia loaduj sa ani nepusti, ked je to takto ze jedna 1000 a druha 3000 chvilu to ide, ale potom prestane ist bud odpocitavanie alebo sa prestane obnovovat zoznam prihodeni... UZ fakt neviem co s tym, prosim pomoc...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 06.01.2011 11:17 | |
|
Tie fcie sa spustaju automaticky, po jednej, resp. troch sekundach, pouzivat udalost onload nie je spravne, odstran to. To je ten pripad, na ktory som ta upozornoval:
Citácia: Este ta upozornim, ze je tu pouzity operator function a nie prikaz function, preto ten nazov "kliky" nemozes pouzit nikde inde ako vnutri tela samotnej fcie kliky. Vsade inde by ti volanie kliky() vyhodilo vynimku. Tazko sa to vysvetluje. Otvor si JS konzolu (vo vyvojarskych nastrojoch v prehliadaci) a zadaj tam: Kód: function f(){} Uvidis, ze ti tento vyraz vratil undefined (teda nevratil ziadnu hodnotu) - toto je teda prikaz function, ktory zadefinoval fciu f. Skus si ale taketo: Kód: var g = function f(){}; Tu samotny vyraz function f(){} musi vracat hodnotu, aby ju bolo mozne priradit do premennej g. Preto je tu function ako operator. V tomto pripade si mozes vyskusat (nie v IE), ze typeof f je undefined - mimo tela fcie je f uz nedefinovane. Presne na tento problem si narazil aj ty, fcia kliky sa zadefinovala len vo vlastnom tele (preto je mozne je pouzit setTimeout(kliky, 3000), ale mimo vlastneho tela (cize napr. v <body onload>) je uz kliky nedefinovane. Ja sa ospravedlnujem, ze je to taketo komplikovane, ale pisem kody vzdy tak, aby sa mne co najpraktickejsie zapisovali, len nie kazdy sa v tom vyzna. Ak chces svoje fcie loaduj a kliky spustat pri nacitani stranky - pravdepodobne to si sa snazil docielit onloadom - je riesenie jednoduche. Vyhod ten vonkajsi setTimeout, tym sa z operatoru function stane prikaz function (kedze nebude musiet vracat hodnotu) a budu fcie zadefinovane ako globalne: Kód: function kliky() { //telo setTimeout(kliky, 3000); } ... <body onload="kliky();">
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 06.01.2011 15:37 | |
|
Nič. Stále nič...
Aj ked odstranim vonkajši timeout, dam do body onload funkcie, aj ked odstranim onload, stale sa to po urcitej dobe zasekne...
Pokiaľ mam nastavene vonkajšie timeouty a nemam body onload, zase preskakuje cas do divu pre historiu prihodeni alebo naopak... Uz fakt neviem, ci som uz natom ja tak zle ze nechapem co pises, alebo to proste nefunguje...
Lebo vsetko co si popisal som vyskusal, bez uspechu
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 06.01.2011 16:11 | |
|
Vies, kde moze byt este chyba? Ty premenne xmlhttp nedefinujes ako lokalne pre obe fcie, ale pretoze si nepouzil klucove slovo var, zadefinovalo sa xmlhttp ako vlastnost globalneho objektu window, preto prakticky loaduj() a kliky() pouzivaju ten isty XMLHttpRequest objekt. Zrejme preto sa to bije. http://diskuse.jakpsatweb.cz/?action=vt ... 106539#var
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 06.01.2011 16:33 | |
|
Ten var som pridal tuto:
Kód: if (window.XMLHttpRequest){ var xmlhttp = new XMLHttpRequest(); } else{ var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
Zatial to ide.. Je to takto spravne?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 06.01.2011 16:52 | |
|
Je to v poriadku.
|
|
Registrovaný: 16.07.07 Prihlásený: 31.07.22 Príspevky: 1225 Témy: 92 | Napísal autor témy sedlák: 06.01.2011 16:59 | |
|
Ďakujem Ďuri, si pán
|
|
| Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| spúštanie scriptov v .css v PHP, ASP | 4 | 409 | 13.01.2010 13:24 pilná lama glama | | Spustanie Windows XP-Problem v Operačné systémy Microsoft | 4 | 389 | 27.12.2007 22:06 deejay-z | | AJAX problem v JavaScript, VBScript, Ajax | 2 | 508 | 07.05.2012 19:37 shaggy | | Ajax Problém konzola neodpovedá v JavaScript, VBScript, Ajax | 3 | 462 | 01.05.2022 20:22 misiak171 | | Ajax problem s DataType v JavaScript, VBScript, Ajax | 4 | 1414 | 15.10.2016 13:56 arno | | Problém pri načítaní prvkov cez ajax v JavaScript, VBScript, Ajax | 0 | 509 | 12.03.2012 13:31 blazej44800 | | ajax + jquery + div reload + thickbox problem v JavaScript, VBScript, Ajax | 4 | 1132 | 22.10.2009 22:03 RealShadow | | Problém s kodovanim pri odosielani cez ajax v JavaScript, VBScript, Ajax | 10 | 806 | 05.09.2011 20:23 josephe | | Ajax - problem s IE ked ma vratit tabulku v JavaScript, VBScript, Ajax | 0 | 551 | 28.03.2009 23:10 oaki | | Spúšťanie v Operačné systémy Microsoft | 3 | 401 | 21.03.2012 22:08 emajko159 | | spustanie programov v Operačné systémy Microsoft | 0 | 328 | 19.11.2013 12:05 magulator | | Spustanie pc [ Choď na stránku: 1, 2 ] v Ostatné | 32 | 718 | 18.03.2018 21:28 Peter246 | | spustanie systemu v Operačné systémy Microsoft | 6 | 481 | 04.10.2007 19:57 MIkuláš Žigraj | | spustanie windowsu v Operačné systémy Microsoft | 2 | 453 | 26.06.2008 11:28 paulxxx | | SPUSTANIE APLIKACIE v Ostatné programy | 10 | 1271 | 12.07.2007 19:07 cubb | | spúšťanie hier. v Počítačové hry | 18 | 659 | 29.04.2018 8:17 shiro |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|