Skyman: Warteschleife setzen

Hallo Leute,

ich versuche gerade eine kurze Warteschleife zu erzeugen, damit ein Javascript Funktionsaufruf etwas verzögert stattfindet.
Soweit ja alles kein Problem, wäre da nicht die komische Bedingung, das die mittels windows.setTimeOut() aufgerufene Funktion keine lokalen Variablen übergeben kann.

Also Problem:

window.setTimeOut("makeRequest(url)", 5000);

funzt nicht, da "url" undefiniert ist in diesem Augenblick.

Kann man das ganz schnell lösen oder wie läßt man den Client grundsätzlich etwas warten? Also:

... Code ...
 window.setTimeOut("", 5000);
 ... Code ...

bringt irgendwie gar nichts, da kann ich einsetzen was ich will, da er offensichtlich keine Funktion aufrufen soll wartet er auch nicht.

Wie kann ich das schnell lösen?

Gruß
Skyman

PS: Sicher könnte ich "url" auch global definieren, aber beißt sich das nicht mit der in makeRequest(domain) definierten Variablen? Die Funktion wird von vielen anderen Seiten bei mir auch aufgrufen, daher will ich diese nicht ändern...

  1. Hi,

    Soweit ja alles kein Problem, wäre da nicht die komische Bedingung, das die mittels windows.setTimeOut() aufgerufene Funktion keine lokalen Variablen übergeben kann.

    wieso "komische Bedingung"? Ein Timeout startet einen neuen Thread, also den neuestmöglichen Kontext. Was Du da "lokale Variablen" nennst, existiert dann - oder zumindest dort - gar nicht mehr, ist also alles andere als lokal.

    Kann man das ganz schnell lösen

    Natürlich. Das erste Funktionsargument von window.setTimeout() muss kein String sein; es kann auch eine Funktionsreferenz, (z.B.) eine anonyme Funktion oder ein Function-Objekt sein. Wenn Du nur einen Primitivwert wie einen String oder eine Zahl übergeben willst, lässt sich das selbst mit einem String-Argument trivial lösen, indem Du den String einfach richtig zusammenbaust.

    PS: Sicher könnte ich "url" auch global definieren,

    Schlimmstmöglicher Workaround. Zudem völlig hyperliquid.

    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. Hallo,

      wieso "komische Bedingung"? Ein Timeout startet einen neuen Thread, also den neuestmöglichen Kontext. Was Du da "lokale Variablen" nennst, existiert dann - oder zumindest dort - gar nicht mehr, ist also alles andere als lokal.

      Habe ich ja verstanden, eine neue Instanz. Aber ich muß der Instanz doch zum arbeiten irgendwelche Grundlagen übermitteln können, wie soll die denn sonst in der Funktion wissen was sie tun soll?

      Natürlich. Das erste Funktionsargument von window.setTimeout() muss kein String sein; es kann auch eine Funktionsreferenz, (z.B.) eine anonyme Funktion oder ein Function-Objekt sein. Wenn Du nur einen Primitivwert wie einen String oder eine Zahl übergeben willst, lässt sich das selbst mit einem String-Argument trivial lösen, indem Du den String einfach richtig zusammenbaust.

      OK, Problem wie oben beschrieben. Ich will letztlich einen String übergeben, der aus festem Text und einigen Variablen zusammengebastelt wird. So jetzt habe ich den String, genannt "url".
      Wie ist jetzt der triviale Weg um diesen String der Funktion zu übermitteln???

      PS: Sicher könnte ich "url" auch global definieren,

      Schlimmstmöglicher Workaround. Zudem völlig hyperliquid.

      Keine ANGST! Wollte ich auch nicht, wollte ja auch nnur verhindern das nicht einer auf diese Idee kommt... :-)

      Gruß
      Skyman

  2. hi,

    Kann man das ganz schnell lösen oder wie läßt man den Client grundsätzlich etwas warten? Also:

    ... Code ...
    window.setTimeOut("", 5000);
    ... Code ...

    bringt irgendwie gar nichts, da kann ich einsetzen was ich will, da er offensichtlich keine Funktion aufrufen soll wartet er auch nicht.

    setTimeout/-Interval lösen kein "Warten" aus, welches die weitere Scriptabarbeitung verzögert.
    Sie legen lediglich fest, dass etwas bestimmtes in x Millisekunden ausgeführt werden soll.
    Direkt nach diesen Anweisungen geht es aber mit dem restlichen Code weiter.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. wenn ist
    var url = "foo";

    dann bringt folgendes:
    setTimeout("makeRequest('"+url+"');",5000);

    javascript dazu das auszuführen:

    makeRequest('foo');

    aber erst nach 5 sekunden...

    allerdings darf url keine >'< enthalten...
    ich nehme an du kannst dir denken warum...

    prinzipiel ist das was du bei settimeout reingibts wie bei einem alert zu schreiben...

    1. wenn ist
      var url = "foo";

      dann bringt folgendes:
      setTimeout("makeRequest('"+url+"');",5000);

      javascript dazu das auszuführen:

      makeRequest('foo');

      aber erst nach 5 sekunden...

      allerdings darf url keine >'< enthalten...
      ich nehme an du kannst dir denken warum...

      prinzipiel ist das was du bei settimeout reingibts wie bei einem alert zu schreiben...

      Ach du schei...
      Ja sicher, das meinen die mit zusammenbasteln, au Gott bin ich doof.

      DANKE! Ja sicher, so funzts, wie bei alert(), da hätte ich auch selber drauf kommen können. :o)

      Danke nochmal, Skyman