timmy: setTimeout wartet nicht

Hi,

Ich habe folgendes Problem: Wenn man bei einem Formular auf submit klickt geht ein Pop up auf während die Daten verarbeitet werden. Das Popup soll so lange laufen bis die Datei besetzt.txt NICHT mehr existiert.

das ganze hat mal funktioniert, jedoch mitlerweile nicht mehr. warum weiss ich auch nicht.

das Problem meiner meinung nach ist: beim aufruf sollte ja ein timeout von 3 sec sein bevor er weitermacht. jedoch schliesst er sich gleich wieder nach dem aufruf, man sieht das pop up nur ca. ne halbe sekunde.

kann mir hier wer helfen? warum überspringt er die pause?

*************************************
<html>
<title>Die Datei wird hochgeladen</title>
<script type="text/javascript" language="javascript">
var xmlhttp = false;
var url = "http://rabmed98/besetzt.txt"

window.setTimeout(function() { macheRequest(url);}, 3000)

function macheRequest(url)
    {
        {
//Es wird versucht ein neues Object zu erstellen.
            try
            {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
//Wenn das erstellen nicht ging, fängt "catch" die Fehlermeldung ab und versuchts nochmals.
            } catch (e)
             {
                try
                {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
//Die Fehlermeldung wird wieder abgefangen
                } catch (e) {}
             }
        }
//Wenn "xmlhttp" nicht vorhaden ist gibt es eine Fehlermeldung
        if (!xmlhttp)
        {
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
        }
//ruft die Funktion alertInhalt() auf
        xmlhttp.onreadystatechange = alertInhalt;
        xmlhttp.open('HEAD', url, true);
        xmlhttp.send(null);
    }

function alertInhalt()
{
//überprüft ob der Browser Vollständig geladen ist
         if (xmlhttp.readyState == 4)
    {
//überprüft, ob die url vorhanden ist(Status 200), bei z.b. nicht vorhanden sein würde es Status 404 geben.
        if (xmlhttp.status != 200)
              {
                   self.close();
              }
                         else
              {
//wenn Status 200 ist startet er die Funktion macheRequest(url) erneut, nachdem er eine Sekunde Pause gemacht hat.
          window.setTimeout(function() { macheRequest(url);}, 1000)
              }
    }
}
</script>
<body>
<body onload="macheRequest(url)">

<center>
<font color="#FF0000" face="Arial" size="3"><b>Die Datei wird hochgeladen und konvertiert. Bitte warten...</b></font>
<br><br>
<img src="pics\finish.gif"><br>

</center>
</body>
</html>
***************************************

gruss, timmy

--
UO-Player
  1. So vielleicht:

    <html>
    <title>Die Datei wird hochgeladen</title>
    <script type="text/javascript" language="javascript">
    var xmlhttp = false;
    var url = "http://rabmed98/besetzt.txt"

    function macheRequest(url)
        {
            {
    //Es wird versucht ein neues Object zu erstellen.
                try
                {
                    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    //Wenn das erstellen nicht ging, fängt "catch" die Fehlermeldung ab und versuchts nochmals.
                } catch (e)
                 {
                    try
                    {
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    //Die Fehlermeldung wird wieder abgefangen
                    } catch (e) {}
                 }
            }
    //Wenn "xmlhttp" nicht vorhaden ist gibt es eine Fehlermeldung
            if (!xmlhttp)
            {
                alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
                return false;
            }
    //ruft die Funktion alertInhalt() auf
            xmlhttp.onreadystatechange = alertInhalt;
            xmlhttp.open('HEAD', url, true);
            xmlhttp.send(null);
        }

    function alertInhalt()
    {
    //überprüft ob der Browser Vollständig geladen ist
             if (xmlhttp.readyState == 4)
        {
    //überprüft, ob die url vorhanden ist(Status 200), bei z.b. nicht vorhanden sein würde es Status 404 geben.
            if (xmlhttp.status != 200)
                  {
                       self.close();
                  }
                             else
                  {
    //wenn Status 200 ist startet er die Funktion macheRequest(url) erneut, nachdem er eine Sekunde Pause gemacht hat.
              window.setTimeout(function() { macheRequest(url);}, 1000)
                  }
        }
    }
    </script>
    <body>
    <body onload="window.setTimeout(macheRequest(url);, 3000)">

    <center>
    <font color="#FF0000" face="Arial" size="3"><b>Die Datei wird hochgeladen und konvertiert. Bitte warten...</b></font>
    <br><br>
    <img src="pics\finish.gif"><br>

    </center>
    </body>
    </html>
    wer rechtschreibfehler findet darf sie behalten....

    1. Hi,

      stimmt, ich habe beim <body onload> einen fehler. nun schliesst er sich jedoch gar nicht mehr...er bleibt einfach offen bis man ihn schliesst!

      gruss, timmy

      --
      UO-Player
  2. Hi,

    kann mir hier wer helfen? warum überspringt er die pause?

    [...]

    <body onload="macheRequest(url)">

    <center>
    <font color="#FF0000" face="Arial" size="3"><b>Die Datei wird hochgeladen und konvertiert. Bitte warten...</b></font>
    <br><br>
    <img src="pics\finish.gif"><br>

    </center>
    </body>
    </html>

    "er" überspringt keine Pause. Nachdem diese (grauenhaft gecodete) Seite ziemlich schnell geladen wird, wird _sofort_ macheRequest(url) aufgerufen, während ein dreisekündiger Timeout läuft, nach dessen Abschluss noch mal das selbe passiert.

    Ersetze den HTML-Code bitte durch etwas, das diese Bezeichnung verdient, danke.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. "er" überspringt keine Pause. Nachdem diese (grauenhaft gecodete) Seite ziemlich schnell geladen wird, wird _sofort_ macheRequest(url) aufgerufen, während ein dreisekündiger Timeout läuft, nach dessen Abschluss noch mal das selbe passiert.

      mmh, stimmt. ich habe das timeout an der falschen stelle.

      danke

      1. mmh, stimmt. ich habe das timeout an der falschen stelle.

        aber irgendwie will er sich jetzt nicht mehr schliessen er bleibt einfach offen :/

        1. hi,

          aber irgendwie will er sich jetzt nicht mehr schliessen er bleibt einfach offen :/

          Dann ist die Bedingung wohl nicht erfüllt.
          Finde heraus, warum.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hi,

            Dann ist die Bedingung wohl nicht erfüllt.
            Finde heraus, warum.

            Das Formular Arbeitet Korrekt. Die Datei existiert und verschwindet auch wieder. Ich vermute da stimmt irgend etwas mit der Variablen übergabe nicht!

            gruss, timmy

            --
            UO-Player
  3. Hi,

    window.setTimeout(function() { macheRequest(url);}, 3000)

    schon mal so probiert? :

    window.setTimeout('macheRequest(url);', 3000);

    gruß
    peter

    1. window.setTimeout(function() { macheRequest(url);}, 3000)

      schon mal so probiert? :

      window.setTimeout('macheRequest(url);', 3000);

      Das geht nicht, wenn url keine globale Variabel ist, dass erstere ist eleganter.

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. window.setTimeout(function() { macheRequest(url);}, 3000)

        schon mal so probiert? :

        window.setTimeout('macheRequest(url);', 3000);

        Das geht nicht, wenn url keine globale Variabel ist, dass erstere ist eleganter.

        und das funktioniert, ohne daß die Funktion als String an window.setTimeout übergeben wird ?

        gruß
        peter

        1. window.setTimeout(function() { macheRequest(url);}, 3000)

          schon mal so probiert? :

          window.setTimeout('macheRequest(url);', 3000);

          Das geht nicht, wenn url keine globale Variabel ist, dass erstere ist eleganter.

          und das funktioniert, ohne daß die Funktion als String an window.setTimeout übergeben wird ?

          Probieren?

          Struppi.

          --
          Javascript ist toll (Perl auch!)
        2. hi,

          und das funktioniert, ohne daß die Funktion als String an window.setTimeout übergeben wird ?

          Natürlich, setTimeout nimmt als Parameter gerne eine Funktionsreferenz entgegen.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hi wahsaga,

            und das funktioniert, ohne daß die Funktion als String an window.setTimeout übergeben wird ?

            Natürlich, setTimeout nimmt als Parameter gerne eine Funktionsreferenz entgegen.

            Danke, diese Auskunft hilft im Gegensatz zu einem schlichten "Probieren ?"  wirklich weiter.

            Habe es inzwischen auch bei MOZILLA gefunden.

            Ist in SELFHTML so nicht erläutert und auch in meinen Büchern und Javascript-Referenz wird immer nur ein String als möglicher Parameter angegeben.

            man lernt halt nie aus.

            gruß
            peter

            1. Danke, diese Auskunft hilft im Gegensatz zu einem schlichten "Probieren ?"  wirklich weiter.

              Naja, du hattest auch nur gefragt, ob es funktionert.

              Struppi.

              --
              Javascript ist toll (Perl auch!)
            2. Hi,

              gehts dann nicht auch so? :

              window.setTimeout(macheRequest,3000,url);

              oder gibts da dann wieder Ärger mit globalen/lokalen Variablen?

              gruß
              peter

              1. Hi,

                gehts dann nicht auch so? :

                window.setTimeout(macheRequest,3000,url);

                Hab diese Syntax mal ausprobiert. Variablenübergabe funktioniert im FF, jedoch NICHT im IE !!!

                gruß
                ptr

              2. gehts dann nicht auch so? :

                window.setTimeout(macheRequest,3000,url);

                die Schreibwiese wäre mir neu.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. gehts dann nicht auch so? :

                  window.setTimeout(macheRequest,3000,url);

                  die Schreibwiese wäre mir neu.

                  Steht so im mozilla developer center und funktioniert im FF auch. Die Beschreibung für setInterval dort ist ziemlich kärglich. Da ist noch nichtmal die Möglichkeit der Stringübergabe erwähnt.
                  Und auch obige Schreibweise nicht, funktioniert im FF aber auch auf setInterval.

                  Wie bereits gepostet funktionierts im IE nicht.

                  gruß
                  peter

                  1. Steht so im mozilla developer center und funktioniert im FF auch. Die Beschreibung für setInterval dort ist ziemlich kärglich. Da ist noch nichtmal die Möglichkeit der Stringübergabe erwähnt.
                    Und auch obige Schreibweise nicht, funktioniert im FF aber auch auf setInterval.

                    Naja, der Punkt ist ja, dass bei Funktionsbeschreibungen nicht die Einzelheiten der Sprache erläutert werden müssen. Sondern lediglich das Funktionsprinzip.

                    Das Problem mit der globalen Variabel ist übrigens, dass du geschrieben hast:
                    window.setTimeout('macheRequest(url);', 3000);

                    D.h. es wird nach 3 Sekunden window.macheRequest(window.url); ausgeführt und deshalb muss url global sichtbar sein. (was in der ursprünglichen Frage auch so war, daher war dein Vorschlag nicht falsch)

                    Wenn url ein String ist, wäre es besser gewesen:
                    window.setTimeout('macheRequest("' + url + '");', 3000);

                    Jetzt wird der Inhalt von url als Stringparameter der Funktion übergeben.

                    Macht aber window.setTimeout( function() {macheRequest(url);}, 3000); auch, da hier eine neue anonyme Funktion erzeugt wird, die lediglich die gwünschte Funktion mit dem Parameter url aufruft. Hier kann url aber auch eine lokale Variabel in einer Funktion sein.

                    Wie bereits gepostet funktionierts im IE nicht.

                    Dann ist das mit den zusätzlichen Parametern, mit Vorsicht zu geniessen.

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)