Legendinno: fAJAX/Js wiederholender Funktionsaufruf

Hallo liebe Selfhtml-Gemeinde,
momentan versuche ich meine Webseiten der heutigen Zeit anzupassen
und momentan ist AJAX ja ein großes Thema.

Ich hab mittlerweile eine Funktion für den request geschrieben
und es funktioniert blendend, jedoch steh ich vor einem Rätsel, dass ich nicht verstehen mag...

Meine Funktion wird komischerweise nur per onClick aufgerufen,
jedoch nicht, wenn ich es einfach immer reloaden lassen will,
indem ich diesen Code in den head setze, wodurch er diese Funktion immer neustarten lassen soll.
(setTimeout hab ich erstmal weggelassen bis ich wenigstens das hier hinkriege)

Der reload-Code sieht so aus:
<script type="text/javascript">
  ajaxrequest('bsp','bsp');
</script>

Meine Funktion sieht folgendermaßen aus:
        <script type="text/javascript">
         <!--
             function ajaxrequest(Url,Id){
                 var req = null;

try{
                    req = new XMLHttpRequest();
                }
                catch (ms){
                    try{
                        req = new ActiveXObject("Msxml2.XMLHTTP");
                    }
                    catch (nonms){
                        try{
                            req = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (failed){
                            req = null;
                        }
                    }
                }

if (req == null)
                   alert("Error creating request object!");

req.open("GET", Url, true);

req.onreadystatechange = function(){
                        switch(req.readyState) {
                            case 4:
                            if(req.status!=200) {
                                alert("Error:"+req.status);
                            }else{
                                document.getElementById(Id).innerHTML = req.responseText;
                            }
                            break;

default:
                                return false;
                            break;
                        }
                    };

req.setRequestHeader("Content-Type",
                                      "application/x-www-form-urlencoded");
                req.send(null);
            }
         //-->
</script>

Wie gesagt funktioniert mit onClick alles prima, jedoch kann bzw. weiß ich nicht wie ich die Funktion ständig reloaden lassen kann,
wodurch sich der Content aktualisiert.

Schonmal danke,
Legendinno

  1. Der reload-Code sieht so aus:
    <script type="text/javascript">
      ajaxrequest('bsp','bsp');
    </script>

    Nix reload. Die Funktion wird genau einmla ausgeführt, nämlich dann, wenn der Browser beim Verarbeirten der Seite darauf stößt. Und ich könnte wetten, daß das Element, wo die Abntwort reingeschrieben wurde, dann noch nicht exisitert. Also schau in die Fehlerkonsole.

    Wie gesagt funktioniert mit onClick alles prima, jedoch kann bzw. weiß ich nicht wie ich die Funktion ständig reloaden lassen kann,
    wodurch sich der Content aktualisiert.

    Durch das, was du nicht nehmen willst: setTimeout oder von mir aus auch setInterval.

    JJ

    1. Hallo Jaroslav,

      ... setTimeout oder von mir aus auch setInterval.

      aber auch dann ist nicht gewährleistet, das der Rest der Seite da ist.

      Gruß, Jürgen

  2. Hallo Legendinno,

    wenn dein Script wird abgearbeitet wird, ist der Rest der Seite noch nicht geladen. Starte es mal mit:

    window.onload = function {
      ajaxrequest('bsp','bsp');
    }

    Gruß, Jürgen

    1. Hallo,

      sorry, Klammern vergessen:

      window.onload = function() {
      //                      ^^ !!!
        ajaxrequest('bsp','bsp');
      }

      Gruß, Jürgen

  3. Erstmal danke für eure Antworten.
    Ich hab die window.onload Variante probiert,
    jedoch musste ich leider erkennen,
    dass weder der automatische reload
    noch der onClick Aufruf funktionieren tut.

    Hm, ich wollte eig. die Seite noch nicht zeigen,
    da ich sie noch komplett überarbeiten werde,
    aber vlt. hilft es bei der Findung der Lösung:
    http://server.rpg-maker.org/sonstiges/portfolio/portal

    Wie gesagt ohne window.onload funktioniert der onClick Aufruf.

    Grüße,
    Legendinno

    PS: Hab ein settimeout eingesetzt.

    1. Hallo Legendinno,

      ein Blick in die Fehlerkonsole hätte dir gezeigt, dass ich (und du) die () hinter function vergessen haben:

      window.onload = function() { .... };
                              ^^

      Gruß, Jürgen

      1. Hallo Legendinno,

        ein Blick in die Fehlerkonsole hätte dir gezeigt, dass ich (und du) die () hinter function vergessen haben:

        window.onload = function() { .... };
                                ^^

        Gruß, Jürgen

        Sorry, hätte mir auffallen müssen.
        Danke dir,
        jedoch ist das Problem weiterhin da:
        Aktuell müsste ja eig. die Funktion ständig reloaded werden
        und dadurch die index.php eingelesen werden, jedoch tut sich garnichts.
        (hab zum Test mehrmal die index.php-Ausgabe verändert ohne zu reloaden)

    2. Hallo Legendinno,

      es muss window.setTimeout heißen.

      Warum tust du etwas sofort und dann noch einmal eine halbe Sekunde später? Evtl. willst du das Nachladen per Ajax mit window.setInterval durchführen.

      Gruß, Jürgen

      1. Hallo Legendinno,

        es muss window.setTimeout heißen.

        Warum tust du etwas sofort und dann noch einmal eine halbe Sekunde später? Evtl. willst du das Nachladen per Ajax mit window.setInterval durchführen.

        Gruß, Jürgen

        Naja, war jetzt ein dummes Beispiel mit der Seite als reload,
        jedoch habe ich gerade kein besseres parat.

        Vorallem werde ich das ständige wiederholen der Funktion
        für Statistiken nutzen, wie Personen aktuell online oder bei Private Nachrichten Systemen.

        Scheint aber dennoch nicht funktionieren.

        1. Hallo Legendinno,

          req.onreadystatechange = function(){
                switch(req.readyState) {
                case 4:
                  if(req.status!=200) {
                   alert("Error:"+req.status);
                  }else{
                   document.getElementById(Id).innerHTML = req.responseText;

          wenn diese Funktion aufgerufen wird, ist die Variable "Id" nicht mehr bekannt. Ersetze sie mal durch die Konstante "body". Wenn hier eine Variable stehen soll, musst du Closures verwenden: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/index.htm

          }
                  break;

          default:
                  return false;
                  break;
               }

          Gruß, Jürgen

          1. Hab das Parameter mal entfernt,
            jedoch ändert es leider nichts,
            da Änderungen der index.php
            nicht ohne manuellen reload ausgegeben werden.

  4. Ah, ich hab es jetzt heraus,
    sorry das ich deine letzte Antwort nicht richtig gelesen habe!
    (setinterval ist die Lösung)