[Java/Ajax] Timeout probleem, meerdere connecties?

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Ik ben bezig met een script wat online/offline status ophaald van een server. Nou wil ik niet moeten wachten op de timeout, dus roep ik het script op de volgende manier aan:

HTML:
1
[img]"rood.gif"[/img]"


Het werkt, maar het duurt lang voordat de code OPEENS geupdate is. De img tags worden op de één of andere manier pas geupdate wanneer alles klaar is. Ik denk dat het komt doordat ik steeds http als var gebruik (1 connectie terwijl er meerderen nodig zijn?) maar aangezien ik niet zo'n held ben met JS vraag ik hier om hulp. De code die ik gebruik:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function getHTTPObject() {
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (E) {
                xmlhttp = false;
            }
        }
    @else
    xmlhttp = false;
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
            xmlhttp.overrideMimeType("text/xml");
        }
        catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}

function checkOnline(ip)
{
    var http = getHTTPObject();

    if (http)
    {
        http.open('GET', 'http://host/online.php?ip='+ip, true);
        http.onreadystatechange = function()
        {
            if (http.readyState == 4 && http.status == 200)
                document.getElementById('img'+ip).src = http.responseText;
        }
        http.send(null);
    }
}


In de body heb ik dan:
HTML:
1
<body onload="checkOnline(<ip>); checkOnline(<ip>)">


Iemand enig idee hoe ik dit aan de gang kan krijgen? Alvast bedankt

[ Voor 6% gewijzigd door m33p op 23-03-2006 14:29 ]


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Hier werkt het heel vlotjes? Body onLoad wordt pas uitgevoerd wanneer de pagina klaar is, misschien zijn er elementen die je site traag laten laden? En waarom roep je 2x checkOnline() aan in de body onload?

March of the Eagles


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Ik roep het meerdere keren aan omdat het om een stuk of 40 servers gaat, vergeten te vermelen (naja praat over 1 en over meerdere in mn TS). Ik weet dat het in een array kan, alleen niet hoe zonder er even voor te gaan zitten omdat ik niet zo into javascript ben :(

Ik heb hem ondertussen flink wat aangepast en nu gaat het al een stuk beter maar nog niet helemaal tof. Soms gaat het netjes 1 voor 1, maar soms krijg ik een tijd niks en dan opeens 10 in 1 keer (die updaten)....

Wat betreft onLoad. Ik wist niet dat pas aan het eind van de pagina geladen werd. De pagina zelf laad snel (0.01 sec ;)) dus dat zal het probleem toch niet moeten zijn. De site zelf knalt er gewoon overheen (ook qua JS), het is puur bovenstaand waar ik op sta te wachten...

Ook niet onbelangrijk: De totale runtime klopt, maar ik krijg ze niet 1 voor 1 wat ik graag zou willen (wat ik hier vlak boven ook vertel, ik krijg soms wel netjes 1 voor 1, soms 5 of meer tegelijk na een lange pauze).

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 09-12-2025
Dat je steeds http als variabel gebruikt maakt niet uit. Het is een locale variabel, dus in elke call is het een andere variabel. Waarschijnlijk gaat het laden van een afbeelding achter in de rij en wordt dat pas uitgevoerd als je laatste request gedaan (en bezig) is. Probeer anders eens iets als document.body.appendChild(document.createTextNode(ip)); toe te voegen om te testen wanneer welke request klaar is.

Noushka's Magnificent Dream | Unity


  • m33p
  • Registratie: September 2002
  • Laatst online: 06-02 20:21
Vreemd, ik heb nou dit:

JavaScript:
1
2
document.getElementById('img'+ip).src = http.responseText;
document.body.appendChild(document.createTextNode(ip));


Hij schrijft wel steeds de textnodes bij het klaar zijn met uitvoeren van het script, maar op de één of andere manier wordt soms de bovensteregel (img src wijzigen) niet uitgevoerd... 4/5 keer werkt het wel, maar soms gaat hij eersts alles uitvoeren en dan pas de boel updaten? Iemand hier een verklaring voor? Ik heb hem overigens op het moment zo wat bijna perfect werkt op bovenstaand na:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function checkOnline(ip)
{
        var http = getHTTPObject();
        if (http)
        {
                http.open('GET', 'online.php?ip='+ip, true);
                http.onreadystatechange = function()
                {
                        if (http.readyState == 4)
                        {
                                document.getElementById('img'+ip).src = http.responseText;
                                document.body.appendChild(document.createTextNode(ip));
                                window.setTimeout('checkOnline('+ip+')', 60000);
                        }
                        else if (http.readyState == 0 || http.readyState == 1)
                                document.getElementById('img'+ip).src = "images/icons/status/loading.gif";
                        else
                                document.getElementById('img'+ip).src = "images/icons/status/running.gif";

                }
                http.send(null);
        }
}

[ Voor 59% gewijzigd door m33p op 24-03-2006 10:37 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 09-12-2025
Valt niet veel aan te doen ben ik bang. Nog wel een tip: je kunt setTimeout ook een functie meegeven, dus iets als dit doen: setTimeout(function() { checkOnline(ip); }, 60000);

Noushka's Magnificent Dream | Unity

Pagina: 1