Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] przeładowanie elementu co 30 sekund
Forum PHP.pl > Forum > Przedszkole
krzychu0808
Witam....
Nie znam języka ajax ale może zrobienie odświeżenia 1 elementu co 30 sekund nie będzie trudne...
mam zegarek graficzny który wygląda tak:
  1. <? $aData = date("Hi", time()+300);?>
  2. <center><img src="images/zegar/<?=$aData[0]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[1]?>.gif" alt="Zegar"/><img src="images/zegar/dwukropek.gif" alt="img"/><img src="images/zegar/<?=$aData[2]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[3]?>.gif" alt="Zegar"/></center>


chodzi mi o to żeby co 30 sekund odświeżał się sam zegarek.. bez przeładowania strony a wiem że ajax daje taką możliwość... proszę o pomoc....
Maxik
Kod
function callAHAHget(url, div) {
    try {
         req = new XMLHttpRequest();
    } catch(err1) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(err2) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(err3) {
                req = false;
            }
        }
    }
    
    var rand = parseInt(Math.random()*99999999);
    req.onreadystatechange = function() {responseAHAH(div)};
    req.open("GET", url+'&rand='+rand, true);
    req.send(null);
}

function responseAHAH(div) {
    if(req.readyState==4) {
        if(req.status==200) {
            document.getElemenById(div).innerHTML = req.responseText;
        } else {
            alert('Błąd serwera')
        }
    } else {
        document.getElementById(div).innerHTML = 'Wczytywanie';
    }
}


Zapisz to sobie do pliku ahah.js .
W sekcji head strony daj: <script type="text/javascript" src="ahah.js"></script>
Do onLoad w body daj setInterval("callAHAHget('adres.php', 'zegarek');", 30000);

Pisane z palca, nic nie gwarantuję, powinno działać.
krzychu0808
Coś nie działa w head:
  1. <script type="text/javascript" src="ahah.js"></script>


dodałem tak:
Kod
<body onload = "setInterval("callAHAHget('index.php', 'zegarek');", 30000);">
<? $aData = date("Hi", time()+300);?>
<center><img src="images/zegar/<?=$aData[0]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[1]?>.gif" alt="Zegar"/><img src="images/zegar/dwukropek.gif" alt="img"/><img src="images/zegar/<?=$aData[2]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[3]?>.gif" alt="Zegar"/></center>
</body>

ten kod co napisałem dałem jako ahah.js ale nic się nie dzieje nie odświeża..

proszę o pomoc....
Maxik
<body onload="setInterval("callAHAHget('adres.php', 'zegarek');", 30000);">

W miejscu gdzie powinien być zegarek daj <div id="zegarek"></div>
krzychu0808
Zrobiłem

Kod
<body onload="setInterval("callAHAHget('index.php', 'zegarek');", 30000);">
<div id="zegarek">
<div class="zegarek">
<? $aData = date("Hi", time()+300);?>
<center><img src="images/zegar/<?=$aData[0]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[1]?>.gif" alt="Zegar"/><img src="images/zegar/dwukropek.gif" alt="img"/><img src="images/zegar/<?=$aData[2]?>.gif" alt="Zegar"/><img src="images/zegar/<?=$aData[3]?>.gif" alt="Zegar"/></center>
</div>
</div>
</body>


i nadal nic się nie dzieje
nospor
Kod
<body onload="setInterval('callAHAHget(\'index.php\', \'zegarek\');', 30000);">
krzychu0808
wyrzuca "Błąd Serwera"....
Ajax jest zainstalowany na serwerze...
AxZx
tutaj masz przyklad jak mozna cos takiego zrobic
http://axzx.pl/technologie/
krzychu0808
hehe na tej stronie jest tylko przykład winksmiley.jpg
Cysiaczek
Cytat
hehe na tej stronie jest tylko przykład winksmiley.jpg


Dowiedz się, czy jest ajax
http://pl.wikipedia.org/wiki/AJAX

a potem użyj najprostszej biblioteki go obsłiugującej:
http://pl.wikipedia.org/wiki/AdvancedAJAX

Nie pytaj tylko skąd ściągnąć, bo się zdenerwuję smile.gif
Pozdrawiam.
AxZx
Cytat
hehe na tej stronie jest tylko przykład

no i? co w tym smiesznego?

Kod
setInterval('refresh2_shoutbox()', 2000);

function refresh2_shoutbox(){    
    $.get('responder.php?c=shoutbox&m=get', function(data){
        $('#shoutbox_content').html(data);
    });
}
Trojan
krzychu0808 z tego co wiem Ajax działa po stronie przeglądarki (czyli nie jest potrzebny po stronie servera) . I trochę źle rozumiesz co koledzy mają na myśli.

TWORZYSZ 3 pliki:

ahah.js czyli to co podał Maxik w 2-gim poscie
zegarek.php czyli to co napisałeś w pierwszym poście (nic tam nie dodawaj nie zmieniaj)
index.html ma on wygladać tak:
  1. <head>
  2. <script type="text/javascript" src="ahah.js"></script>
  3. </head>
  4.  
  5. <body onload = "setInterval("callAHAHget('zegarek.php', 'zegarek');", 30000);">
  6. <div id="zegarek"></div>
  7. </body>
  8. </html>


umieść wszystkie pliki w jednym folderze
zegarek powinien pojawić się gdy odpalisz Index.html
Maxik
Sprostuję post Trojana:
index.html:
  1. <script type="text/javascript" src="ahah.js"></script>
  2. </head>
  3.  
  4. <body onload = "setInterval(\"callAHAHget('zegarek.php', 'zegarek');\", 30000);">
  5. <div id="zegarek"></div>
  6. </body>
  7. </html>
Trojan
hehe Maxik \ nie pomaga w tym wypadku, zresztą zauważyłem że cała funkcja callAHAHget nie działa sadsmiley02.gif (przynajmniej u mnie) napisałem coś prostszego:
index.html
  1. <html>
  2.      <head>
  3.            <script type="text/javascript">
  4.  
  5.      //aby dzialalo na IE (niewiem kto tego uzywa jeszcze)
  6.      var ObiektXMLHttp = false;
  7.  
  8.      if (window.XMLHttpRequest){
  9.            ObiektXMLHttp = new XMLHttpRequest();
  10.            }else if(window.ActiveXObject){
  11.                  ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  12.                  }
  13.  
  14.      function zegar(){
  15.            if(ObiektXMLHttp){
  16.                  //pobieranie danych
  17.                  ObiektXMLHttp.open("GET", 'zegarek.php');
  18.  
  19.                  ObiektXMLHttp.onreadystatechange = function(){
  20.                        if(ObiektXMLHttp.readyState == 4){
  21.                              i = ObiektXMLHttp.responseText;
  22.                              document.getElementById('zegarek').innerHTML=i;
  23.                        }
  24.                  }
  25.  
  26.                  ObiektXMLHttp.send(null);
  27.            }
  28.      }
  29.  
  30.            </script>
  31.      </head>
  32.  
  33.      <body onload="setInterval('zegar();', 30000);">
  34.            <div id="zegarek"></div>
  35.      </body>
  36. </html>

w tym wypadku ahah.js nie jest już potrzebny
działa na 100% (sprawdzałem)
Maxik
Z mojej biblioteki korzystam juz dobre 3 miesiące i zawsze działała. Chyba nawet wiem w czym był błąd: url jest nastawiony na minimum 1 parametr gdyż rand dodaje odrazu & zamiast ? więc zegarek.php?abc=abc już by działało.
krzychu0808
Działa ale jest 1 problem jak ustawiliśmy co 30 sekund to zegarek się pojawia dopiero po 30 sekundach i się odświeża co 30 sekund skorzystałem z

Cytat
  1. index.html
  2. XML
  3. <head>
  4. <script type="text/javascript">
  5.  
  6. //aby dzialalo na IE (niewiem kto tego uzywa jeszcze)
  7. var ObiektXMLHttp = false;
  8.  
  9. if (window.XMLHttpRequest){
  10. ObiektXMLHttp = new XMLHttpRequest();
  11. }else if(window.ActiveXObject){
  12. ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  13. }
  14.  
  15. function zegar(){
  16. if(ObiektXMLHttp){
  17. //pobieranie danych
  18. ObiektXMLHttp.open("GET", 'zegarek.php');
  19.  
  20. ObiektXMLHttp.onreadystatechange = function(){
  21. if(ObiektXMLHttp.readyState == 4){
  22. i = ObiektXMLHttp.responseText;
  23. document.getElementById('zegarek').innerHTML=i;
  24. }
  25. }
  26.  
  27. ObiektXMLHttp.send(null);
  28. }
  29. }
  30.  
  31. </script>
  32. </head>
  33.  
  34. <body onload="setInterval('zegar();', 30000);">
  35. <div id="zegarek"></div>
  36. </body>
  37. </html>

w tym wypadku ahah.js nie jest już potrzebny
działa na 100% (sprawdzałem)
golaod
<body onload="zegar();setInterval('zegar();', 30000);">
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.