XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Javascript & Ajax (http://xhtmlforum.de/forumdisplay.php?f=83)
-   -   AJAX-Request alle 5 Min. anstoßen (http://xhtmlforum.de/showthread.php?t=55441)

Abandon5491 20.01.2009 15:49

AJAX-Request alle 5 Min. anstoßen
 
Huhu,

ich bin auf der Suche nach einer Lösung, wie man einen AJAX-Request alle 5 Min. ausführen kann. Hab auch schon gegockelt, aber nichts passendes gefunden.

Ich habe eine uebersicht.php und rufe dort mit der Funktion startRequest('status1.php') den Inhalt ab. Dies soll aber nach dem 1. Mal (laden der Seite) alle 5 Min. von sich aus geschehen.

Kann mir bitte wer helfen?

Scheppertreiber 20.01.2009 16:31

Das muß clientseitig angeschubst werden.

Geht mit JavaScript, einen Timer setzen, der alle 50 m eine Abfrage startet.

Code:

<script type='text/javascript'>
function ReLoadPage(){
  window.location.reload();
}
window.setTimeout( "ReLoadPage()", 30000);
</script>

Statt window.location.reload(); halt den entsprechenden Ajax-Call einbasteln.

Abandon5491 20.01.2009 17:40

Hat auf anhieb geklappt, vielen Dank!

Eine Frage habe ich aber noch:

Meine startRequest-Funktion sieht so aus:
PHP-Code:

var http_request false;
 
    function 
startRequest(urlstatusid)
    {
        
url += '?statusid=' statusid;
        
        
http_request false;
 
        if (
window.XMLHttpRequest)
        {
            
http_request = new XMLHttpRequest();
        }
        else if (
window.ActiveXObject)
        {
            try
            {
                
http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (
e)
            {
                try
                {
                    
http_request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (
e) {}
            }
        }
 
        if (!
http_request)
        {
            
alert('Erzeugen der XMLHTTP-Instanz fehlgeschlagen.');
            return 
false;
        }
        
http_request.open('GET'urltrue);
        
http_request.onreadystatechange manageRequest;
        
http_request.send(null);
    } 

Das ist meine manageRequest-Funktion:
PHP-Code:

function manageRequest()
    {
        if (
http_request.readyState == 4)
        {
            var 
answer http_request.responseText;
            if (
document.getElementById("status1-result").innerHTML != answer)
            {
                
document.getElementById("status1-result").innerHTML answer;
            }
            else
            {
                
document.getElementById("status1-result").innerHTML "";
            }
        }
    } 

Ich würde der manageRequest-Funktion gerne den "statusid"-Wert aus der startRequest-Funktion übergeben, sodass ich den Rückgabewert in den passenden DIV-Container des Status einbinden kann.

Scheppertreiber 20.01.2009 17:45

Vielleicht als globele Variable speichern und abhängig davon den div wählen ?

Abandon5491 21.01.2009 17:35

Stimmt, darauf in ich an dem Tag nicht gekommen.^^

Hab noch eine Frage: Kann man mehrere Requests zur gleichen Zeit laufen lassen? Bei mir überschreibt er irgendwie den 1. Request mit dem 2. und zeigt dann an beiden Ausgabe-Stellen den 2. Request an.

In4matiker 21.01.2009 17:56

Zitat:

Hab noch eine Frage: Kann man mehrere Requests zur gleichen Zeit laufen lassen? Bei mir überschreibt er irgendwie den 1. Request mit dem 2. und zeigt dann an beiden Ausgabe-Stellen den 2. Request an.
ja kann man - Du musst einfach das Objekt das den Request machen neu instanzieren und nicht das Bestehende verwenden.

Code:


if (window.XMLHttpRequest)
{
var http_request = new XMLHttpRequest();
}


Abandon5491 21.01.2009 18:30

Zitat:

Zitat von In4matiker (Beitrag 419110)
ja kann man - Du musst einfach das Objekt das den Request machen neu instanzieren und nicht das Bestehende verwenden.

Code:


if (window.XMLHttpRequest)
{
var http_request = new XMLHttpRequest();
}


Wenn ich das mache, zeigt er mir nur den 1. Request an und nicht den 2.:
HTML-Code:

<script type="text/javascript" language="javascript">
        var http_request = false;
    function startInfoRequest(url, id)
        {
                url += "?id=" + id;
               
        http_request = false;
 
        if (window.XMLHttpRequest)
                {
            var http_request = new XMLHttpRequest();
        }
                else if (window.ActiveXObject)
                {
            try
                        {
                var http_request = new ActiveXObject("Msxml2.XMLHTTP");
            }
                        catch (e)
                        {
                try
                                {
                    var http_request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                                catch (e) {}
            }
        }
 
        if (!http_request)
                {
            alert('Erzeugen der XMLHTTP-Instanz fehlgeschlagen.');
            return false;
        }
        http_request.open('GET', url, true);
        http_request.onreadystatechange = manageInfoRequest;
        http_request.send(null);
    }
 
    function manageInfoRequest()
        {
        if (http_request.readyState == 4)
                {
            var answer = http_request.responseText;
            if (document.getElementById("data").innerHTML != answer)
                        {
                                document.getElementById("data").innerHTML = answer;
            }
            else
                        {
                                document.getElementById("data").innerHTML = "";
            }
        }
    }
</script>

#Edit: Und komischerweise zeigt er manchmal den ersten Request in beiden Ergebnisbehältern. oO

In4matiker 22.01.2009 11:10

Du definierst noch
Code:

var http_request = false;
noch ausserhalb der Funktion - das ist sicher nicht nötig. Mach auch mal das
Code:

http_request = false;
weg.

Abandon5491 23.01.2009 11:01

Es hat sich nichts geändert. :/

Selbst wenn ich überall in dem 2. Request eine 2 hinter die Objekte mache, funktionierts nicht. Sondern er lädt das selbe wie in dem 1. Request in die Box für den 2. Request!


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:18 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023