[ Príspevkov: 13 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
NapísalOffline : 08.12.2010 21:25 | AJAX - spustanie 2 scriptov, problem

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?


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 09.12.2010 12:03 | AJAX - spustanie 2 scriptov, problem

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?


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 09.12.2010 16:01 | AJAX - spustanie 2 scriptov, problem

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 :)


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 09.12.2010 16:16 | AJAX - spustanie 2 scriptov, problem

Je to dobre riesenie, mozes nechat tak.


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 10.12.2010 19:39 | AJAX - spustanie 2 scriptov, problem

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...


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 10.12.2010 19:42 | AJAX - spustanie 2 scriptov, problem

To prve sa stat moze, to druhe urcite nie. Daj odkaz na zivu ukazku, nech sa pozriem.


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 05.01.2011 23:53 | AJAX - spustanie 2 scriptov, problem

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...


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 06.01.2011 11:17 | AJAX - spustanie 2 scriptov, problem

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();">


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 06.01.2011 15:37 | AJAX - spustanie 2 scriptov, problem

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


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 06.01.2011 16:11 | AJAX - spustanie 2 scriptov, problem

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


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 06.01.2011 16:33 | AJAX - spustanie 2 scriptov, problem

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?


Offline

Čestný člen
Čestný člen
AJAX - spustanie 2 scriptov, problem

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno
NapísalOffline : 06.01.2011 16:52 | AJAX - spustanie 2 scriptov, problem

Je to v poriadku.


Offline

Užívateľ
Užívateľ
AJAX - spustanie 2 scriptov, problem

Registrovaný: 16.07.07
Prihlásený: 31.07.22
Príspevky: 1225
Témy: 92 | 92
Napísal autor témyOffline : 06.01.2011 16:59 | AJAX - spustanie 2 scriptov, problem

Ďakujem Ďuri, si pán :slaver:


 [ Príspevkov: 13 ] 


AJAX - spustanie 2 scriptov, problem



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

spúštanie scriptov v .css

v Backend

4

443

13.01.2010 13:24

pilná lama glama

V tomto fóre nie sú ďalšie neprečítané témy.

Spustanie Windows XP-Problem

v Windows

4

456

27.12.2007 22:06

deejay-z

V tomto fóre nie sú ďalšie neprečítané témy.

AJAX problem

v Frontend

2

650

07.05.2012 19:37

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

Ajax problem s DataType

v Frontend

4

1522

15.10.2016 13:56

arno

V tomto fóre nie sú ďalšie neprečítané témy.

Ajax Problém konzola neodpovedá

v Frontend

3

598

01.05.2022 20:22

misiak171

V tomto fóre nie sú ďalšie neprečítané témy.

ajax + jquery + div reload + thickbox problem

v Frontend

4

1224

22.10.2009 22:03

RealShadow

V tomto fóre nie sú ďalšie neprečítané témy.

Problém pri načítaní prvkov cez ajax

v Frontend

0

610

12.03.2012 13:31

blazej44800

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s kodovanim pri odosielani cez ajax

v Frontend

10

919

05.09.2011 20:23

josephe

V tomto fóre nie sú ďalšie neprečítané témy.

Ajax - problem s IE ked ma vratit tabulku

v Frontend

0

640

28.03.2009 23:10

oaki

V tomto fóre nie sú ďalšie neprečítané témy.

Spúšťanie

v Windows

3

472

21.03.2012 22:08

emajko159

V tomto fóre nie sú ďalšie neprečítané témy.

spúšťanie hier.

v Hry a herné konzoly

18

758

29.04.2018 8:17

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Spustanie XP

v Windows

14

726

01.04.2008 19:39

9tommy9

V tomto fóre nie sú ďalšie neprečítané témy.

spustanie windowsu

v Windows

2

532

26.06.2008 11:28

paulxxx

V tomto fóre nie sú ďalšie neprečítané témy.

SPUSTANIE APLIKACIE

v Ostatné programy

10

1422

12.07.2007 19:07

cubb

V tomto fóre nie sú ďalšie neprečítané témy.

Spustanie pc

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Ostatné

32

876

18.03.2018 21:28

Peter246

V tomto fóre nie sú ďalšie neprečítané témy.

Spomalene spustanie

v Windows

4

539

04.12.2009 17:16

mmichalll



© 2005 - 2026 PCforum, edited by JanoF