Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: HttpRequest
Forum PHP.pl > Forum > XML, AJAX
RifleMan
Witam


Mam taki kod na pobieranie co 1 sekunde danych z bazy danych:
Kod
<script type="text/javascript">
//Odświerzanie licznika On-line
        //<![CDATA[
            var ajax_method = typeof XMLHttpRequest == "undefined"?new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();
            function aktu() {
                wczytaj_licznik();
                setTimeout("aktu()", 1000);
            }

            function synch(online) {
                document.getElementById("online").innerHTML = ajax_method.responseText;
            }

            function wczytaj_licznik() {
                ajax_method.onreadystatechange = function(){
                    if (ajax_method.readyState == 4 && ajax_method.status == 200) {
                            
                            synch(ajax_method.responseText);
                            
                    }
                };
                ajax_method.open( "GET", 'online.php' );
                ajax_method.send(null);
                
                
            }
            //]]>
  </script>


I mam takiego Div'a:
Kod
<div id="online" style="background: rgb(255, 255, 255) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; overflow: auto; height: 15px; width: 70px; font-style: normal; font-variant: normal; font-weight: normal; font-size: 15px;margin: 0px auto; align: center;">Ładowanie Licznika Online</div>


No i tak się składa że nic się nie dzieje, tylko wyświetla Ładowanie Licznika Online.

Pomocy!!! Dam +
wujko_thc
jak masz jakąś funkcję to wypadałoby ją gdzieś wywołać tongue.gif

no chyba, że coś przeoczyłem
AjaxSrajax
1) Jakieś dziwne to tworzenie XMLHttpRequest u Ciebie
2) Nawet jak by było ok, to i tak innerHTML nadpisze zawartość i cały czas będziesz mieć 1 napis;), lepiej wykorzystaj DOM
(dla testów alert winksmiley.jpg

Oto mój kod, i śmiga bardzo ładnie winksmiley.jpg

HTML:

Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<title>Ajakśik</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
  <div id="blok">
  <p><a href="#" onclick="pingpong(); return false;">Klik!</a></p>
  </div>
</body>
</html>


JS:

Kod
function getXhr(){

   var xhr=false;
     if(window.XMLHttpRequest){
       xhr=new XMLHttpRequest();
      } else if (window.ActiveXObject){
   try{
        xhr=new ActiveXObject("Msxml2.XMLHTTP");
   } catch(e) {
try{
     xhr=new ActiveXObject("Microsoft.XMLHTTP");
     } catch(e) {
       xhr=false;
       }
      }
     }
     return xhr;
  }
     function getData(){
     var xhr=getXhr();
        if(xhr){
           xhr.open("GET","online.php",false);
           xhr.send(null);
         if(xhr.readyState==4 && xhr.status==200){
        
  
   var aka=document.createElement("p");                  // stwórz akapit
   var akatxt=document.createTextNode(xhr.responseText); // -/- węzeł txt
   aka.appendChild(akatxt);                               // dodaj do akapitu
   document.getElementById("blok").appendChild(aka);      // dodaj aka do bloku
        
              }
             }
             }
  
            function pingpong(){
             getData();
                setTimeout("pingpong()", 1000);
                 }


no to pozdro winksmiley.jpg
paziek
Pierwsza sprawa.
function synch(online) {
document.getElementById("online").innerHTML = ajax_method.responseText;
}
function synch(online) {
document.getElementById("online").innerHTML = online;
}

Druga, to tak jak już wujko_thc wspomniał - wywołaj gdzieś funkcję aktu().

Trzecia
  1. var ajax_method = typeof XMLHttpRequest == "undefined"?new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();
to prawidłowy operator tarnarny (czy jak to się tam zwie) i jest to jak najbardziej prawidłowe przypisywanie obiektu XHRa.

smile.gif
RifleMan
Wszystko chodzi tylko że wolno!!!. Mam ustawione na pobieranie rekordów z bazy do okienka co 3 sekundy i jeszcze ten licznik oline co tu pisałem, i te rekordy do okienka bardzo szybko pobiera ale ten licznik zanim pobieże dane to pół minuty trzeba czekać. Te dwie funkcje są w body onload.
paziek
Jakie dwie funkcje?
Wystarczy ta: aktu()

Jak chcesz żeby odpalało się szybciej, to zrób odwołanie do funkcji inline, zamiast w onload
Kod
<div id="online">Ładowanie Licznika Online</div>
<script type="text/javascript">aktu();</script>

ważne, aby odwołanie było pod elemencie o id "online", chyba, że zanim dostaniesz odpowiedź z serwera - ten element zdąży się doczytać, wtedy nie jest to konieczne (ale ryzykowne).
RifleMan
Znacznie przyspieszyło. Czeka się teraz 3 sekundy smile.gif. Oczywiście plusiki dla każdego winksmiley.jpg. Ale później wszytywanie rekordów do innego okienka nie chodzi jak trzeba sad.gif. Straszne opóźnienie jest.
paziek
To może podaj całość - działającego - kodu. Wtedy sprawdzimy u siebię i może coś poradzimy, bo tak to już raczej ciężko coś stwierdzić.
AjaxSrajax
Hej, sorry za offtop, ale zmotywowany ciekawością pozwolę sobie na małą niedygresję.

Kod
var ajax_method = typeof XMLHttpRequest == "undefined"?new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();


Cytat
to prawidłowy operator tarnarny (czy jak to się tam zwie) i jest to jak najbardziej prawidłowe przypisywanie obiektu XHRa.


Czyżby? Z tego co wiem operator warunkowy "?" pozwala na sprawdzenie tylko dwóch stanów. Czyli ten kod można rozumieć jako:
jeżeli nie można stworzyć obiektu XMLHttpRequest to jest to IE, więc użyj Microsoft.XMLHttp. A co z jego nowszymi wersjami np. Msxml2.XMLHTTP albo msxml3? Moim zdaniem nie jest to jak najbardziej prawidłowe przypisanie XHR-a. Czy gdzieś się mylę? Liczę na odpowiedź i pozdrawiam smile.gif
paziek
W sumie to nie wiem jak to jest z tymi wersjami ActiveX'a, pewnie najnowsza wystarczy i tylę, chyba, że skrypt ma działać pod IE starszym jak 6? snitch.gif
Ja osobiście w ogóle nie używam ActiveX'owej wersji XHRa. W dupie mam IE6 tongue.gif
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.