Literunner: windows.setTimeout (Rückgabewert?)

Moinsen,

ich habe einen einfachen DIV-TAG. Diesen möchte ich nur anzeigen lassen, wenn die Seite mit Javscript aktulisiert wurde. Sprich:

window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);

Mein Problem:
Wie kann ich einen Rückgabewert angeben und diesen abfragen?

zb.

<?php  
if(Bedingung)  
{  
  echo'<div>Soll nur angezeigt werden, wenn per JS aktualisiert wurde</div>';  
}  
?>

LG

  1. Mein Problem:
    Wie kann ich einen Rückgabewert angeben und diesen abfragen?

    Du brauchst keine Rückgabewert, sondern musst im php-Script erkennen, das die Seite jetzt nicht normal geladen wurde. Das kannst du über einen URL-Parameter steuern. Z.B. window.setTimeout("document.location.href = 'http://www.meinewebsite.de?reload'", 2000);
    Den kannst du dann im Serverscript abfragen.
    Allerdings kann man dann auch direkt darauf verlinken. Wenn das kein Problem ist...

    Das spezielle Szenario, wo du so etwas benötigst, finde ich recht ungewöhnlich.

    1. Mein Problem:
      Wie kann ich einen Rückgabewert angeben und diesen abfragen?

      Du brauchst keine Rückgabewert, sondern musst im php-Script erkennen, das die Seite jetzt nicht normal geladen wurde. Das kannst du über einen URL-Parameter steuern. Z.B. window.setTimeout("document.location.href = 'http://www.meinewebsite.de?reload'", 2000);
      Den kannst du dann im Serverscript abfragen.
      Allerdings kann man dann auch direkt darauf verlinken. Wenn das kein Problem ist...

      Das spezielle Szenario, wo du so etwas benötigst, finde ich recht ungewöhnlich.

      Genau so, hatte ich mir das gedacht.
      Nur das man direkt darauf verlinken kann ist nicht so schön.

      Ja stimmt, klingt ungewöhnlich. Soll meinen Usern auch nur zeigen, das die Daten erfolgreich gespeichert wurden sind.

      1. Ja stimmt, klingt ungewöhnlich. Soll meinen Usern auch nur zeigen, das die Daten erfolgreich gespeichert wurden sind.

        Dafür benötigst du ja aber keinen Timeout. Ich gehe mal davon aus, daß du die Daten mit einem XmlHttpRequest an den Server sendest, sonst hättest du den Reload ja schon automatisch. Dann macht aber ein manuell angestoßener Reload keinen Sinn, das macht man ja i.d.R. nur um das bestehende Dokument nicht neu zu laden, sondern mit JS anzupassen.

  2. Meine Herren,

    ich habe einen einfachen DIV-TAG. Diesen möchte ich nur anzeigen lassen, wenn die Seite mit Javscript aktulisiert wurde. Sprich:

    window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);

    setTimeout ist die falsche Herangehensweise. Statt ständig den Zustand abzufragen und Änderungen zu identifizieren, solltest du wirklich auf Änderungen reagieren.

    Um auf DOM-Änderungen zu reagieren gibt es MutationObserver [mdn]

    Für ältere Browser gibt es immerhin MutationEvents [mdn], die sind aber inzwischen als veraltet eingestuft.

    1. Meine Herren,

      ich habe einen einfachen DIV-TAG. Diesen möchte ich nur anzeigen lassen, wenn die Seite mit Javscript aktulisiert wurde. Sprich:

      window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);

      setTimeout ist die falsche Herangehensweise. Statt ständig den Zustand abzufragen und Änderungen zu identifizieren, solltest du wirklich auf Änderungen reagieren.

      Um auf DOM-Änderungen zu reagieren gibt es MutationObserver [mdn]

      Für ältere Browser gibt es immerhin MutationEvents [mdn], die sind aber inzwischen als veraltet eingestuft.

      Ich reagiere schon dirket darauf. Ich benutze schon die callback funktion. In meiner callback funktion steht der Reload. Hatte ich vergessen zu erwähnen, sry.

      Ist es vielleicht möglich in der Callback Funktion, nach dem Reload, eine Info anzuzeigen. Das die Daten erfolgreich gespeichert wurden?

      Es wird eine PHP Datei aufgerufen(Daten werden in die DB geschrieben). Danach erfolgt der Reload. Und jetzt soll die Info erscheinen "Erfolgreich gespeichert". Aber bitte kein Fenster, was man erst schließen muss, oder auf OK klicken muss.

      1. Hallo,

        Ist es vielleicht möglich in der Callback Funktion, nach dem Reload, eine Info anzuzeigen. Das die Daten erfolgreich gespeichert wurden?

        Es wird eine PHP Datei aufgerufen(Daten werden in die DB geschrieben). Danach erfolgt der Reload. Und jetzt soll die Info erscheinen "Erfolgreich gespeichert". Aber bitte kein Fenster, was man erst schließen muss, oder auf OK klicken muss.

        Ich glaube, hier liegt ein Missverständnis vor. JavaScript läuft im Browser im Kontext einer einzelnen HTML-Seite. Der Server bekommt HTTP-Anfragen und beantwortet sie i.d.R. mit HTML-Seiten, in denen dann JavaScript laufen kann.

        Der Server weiß nicht, was du im JavaScript machst. Mit location.href = "URL" sorgst du dafür, dass die vorhandene HTML-Seite mitsamt JavaScripten abgebaut wird und eine neue vom Server angefordert wird. Dein JavaScript-Timeout »überlebt« den Seitenwechsel also nicht. Du hast nicht in einem JavaScript, das in Seite 1 lebt, Zugriff auf die folgende Seite 2. Deshalb lässt sich der Befehl, den du hier gepostet hast, nicht einfach erweitern, um den Inhalt von Seite 2 zu erweitern.

        Damit der Server den Meldungstext in den HTML-Code der neuen Seite einbauen kann, muss du ihm diese Information in der HTTP-Anfrage mitgeben, z.B. wie unknown es vorschlägt. Andernfalls weiß der Server nicht, dass er gerade jetzt die Meldung anzeigen soll. In PHP wird üblicherweise mit $_GET oder $_SERVER['QUERY_STRING'] gearbeitet, um auf GET-Parameter zuzugreifen.

        Es wäre auch eine clientseitige Lösung möglich, d.h. du merkst dir seitenübergreifend, dass ein Speichervorgang getätigt wurde, und blendest auf Seite 2 mit JavaScript einen Meldungstext ein. Diese Lösung ist aber eher komplizierter.

        Grüße,
        Mathias

  3. Om nah hoo pez nyeetz, Literunner!

    ich habe einen einfachen DIV-TAG. Diesen möchte ich nur anzeigen lassen, wenn die Seite mit Javscript aktulisiert wurde.

    Verwechsle nicht Tag und Element.

    Aber was meinst du mit aktualisiert? neu geladen? Warum möchtest ein [F5] oder [strg]+[F5] von einem per JS ausgelösten reload unterscheiden?

    Du könntest mit setTimeout ein Formular abschicken, das eine entsprechende Variable enthält.

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen und und undeutlich.

  4. window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);

    Geht das überhaupt, dem setTimeout einen Code zu übergeben? Ich denke, es muss der Name einer Funktion sein.

    Mein Problem:
    Wie kann ich einen Rückgabewert angeben und diesen abfragen?

    Naja, du hängst dem Domainnamen einen Parameter an. Auf den kann deine index.php auf dem Server dann reagieren.

    function autoLoad() {  
      document.location.href = 'http://www.meinewebsite.de/?load=auto'  
    }  
    window.setTimeout("autoLoad", 2000);
    
    if ( isset($_GET['load']) && $_GET['load'] == "auto" ) echo "automatisch geladen<br>";  
    
    

    Mit Javascript allein geht's nicht, eventuell noch mit Javascript + Cookie. Du fragst ein Cookie ab. Wenn es fehlt, sind entweder Cookies nicht zulässig oder die Seite wurde nicht automatisch geladen. Wenn es vorhanden ist, wurde die Seite mindestens einmal automatisch geladen. Du setzt das Cookie in der Funktion autoLoad().

    Linuchs

    1. Hallo,

      window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);
      Geht das überhaupt, dem setTimeout einen Code zu übergeben? Ich denke, es muss der Name einer Funktion sein.

      entweder eine Funktionsreferenz, oder ein String, der Javascript-Code enthält. Beides ist möglich.

      Ciao,
       Martin

      --
      Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.

        Sagt der Professor zu den Medizinstudenten: "Als Mediziner muss man zuerst seinen Ekel überwinden", taucht den Finger in die Urinprobe und schleckt ihn ab. "Machen Sie mir das bitte nach".

        Die Studenten würgen ziemlich, aber überwinden sich schließlich.

        Professor: "Und zweitens muss man die Beobachtungsgabe schärfen. Dann hätten Sie bemerkt, dass ich den Zeigefinger eingetaucht, aber den Mittelfinger abgeleckt habe."

        Linuchs

    2. window.setTimeout("document.location.href = 'http://www.meinewebsite.de'", 2000);

      Geht das überhaupt, dem setTimeout einen Code zu übergeben? Ich denke, es muss der Name einer Funktion sein.

      Den Functionbody als String geht auch.