LastBoyScout: Seitenaktualisierung per Schieberegler definieren

Hallo zusammen,

Ich möchte gerne den Intervall der Seitenaktualisierung per Schieberegister einstellbar machen. Wie kann ich mittels onchange des Eingabefeldes auf den Wert der Metaangabe im Seitenkopf zugreifen?


<!doctype html>
<html>
  <head>
    <meta http-equiv="refresh" content="30">
  </head>
  <body>
    <form action="">
      <input name="reload" id="reload" type="range" min="5" max="60" value="30" onchange="?" />
    </form>
  </body>
</html>

Oder gibt es evtl. eine bessere Methode?

Gruß LBS

  1. Lieber LastBoyScout,

    und nachdem die Seite neu geladen hat, ist der Wert wieder wie vor der Auswahl... nicht besonders sinnvoll!

    Liebe Grüße,

    Felix Riesterer.

    --
    "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
    1. Hallo Felix,

      Nein, das wäre ja zu blöd...

      Selbstverständlich wird der Startwert mit PHP entsprechend der Eingabe aktualisiert!

      Gruß LBS

      1. Lieber LastBoyScout,

        und wie übermittelst Du den Wert an PHP? Wie kommuniziert Dein JavaScript mit dem passenden Gegenstück?

        Man kann mit JavaScript auf Elemente im Dokument zugreifen und ihre Eigenschaften manipulieren. Mir stellt sich aber gerade die Frage, womit Du in Deinem Projekt hantierst. Entweder Du nutzt ein passendes HTML5-Element (bei passendem Doctype), oder Du behilfst Dir mit irgendeinem JavaScript-Framework wie jQuery-UI...

        Lass doch mal ein bisschen Code sehen!

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
  2. Hallo,

    Habe leider keine Idee, wie man auf den Wert von zugreifen kann... Meine Alternativlösung ist daher das automatischen absenden des Formulars onchange="this.form.submit()" und PHP. Allerdings muss man es über GET machen, da es bei POST ansonsten immer wieder auf den Startwert zurückfällt:

    
    <?php
    if (isset($_GET['Reload'])) {
    	$Reload = $_GET['Reload'];
    } else {
    	$Reload = 30;
    }
    ?>
    <!doctype html>
    <html>
      <head>
        <meta http-equiv="refresh" content="<?php echo $Reload ?>">
      </head>
      <body>
        <form name="Aktualisieren" oninput="Output.value=parseInt(Reload.value)" action="" method="get">
    	  <label for="Reload">Reload: </label>
          <input name="Reload" id="Reload" type="range" min="5" max="60" value="<?php echo $Reload ?>" onchange="this.form.submit()" />
    	  <output name="Output" id="Output" for="Reload"><?php echo $Reload ?> sec.</output>
        </form>
      </body>
    </html>
    
    

    P.S. Tipp: Über oninput im Formular-Tag lasse ich mir den Einstellungswert im Output- Element anzeigen.

    Gruß und noch eine schöne Sonnenfinsternis, LBS

    1. Lieber LastBoyScout,

      Habe leider keine Idee, wie man auf den Wert von zugreifen kann...

      mit document.getElementsByTagName("meta")!

      Du musst nur in einer Schleife alle gefundenen <meta> daraufhin untersuchen, ob sie ein Attribut namens "http-equiv" haben. Dann hast Du das entsprechende Element und kannst den Attributwert als Eigenschaft lesen und schreiben.

      Meine Alternativlösung ist daher das automatischen absenden des Formulars onchange="this.form.submit()" und PHP.

      Nicht gut. Da es sich um eine server-seitige Sache handelt, von der der User nicht gestört werden will, sollte JavaScript diesen Aufruf im Hintergrund erledigen, ohne dass das Dokument erneut geladen wird. Dazu kann man entweder AJAX (neumodisch, kann GET und POST) verwenden (also ein XMLHttpRequest-Objekt), oder man erzeugt ein Bild (altmodisch, nur GET) und gibt seiner src-Eigenschaft die passende URL.

      Allerdings muss man es über GET machen, da es bei POST ansonsten immer wieder auf den Startwert zurückfällt:

      Bitte was? Du meinst, dass Dein PHP-Script keine vernünftigen $_POST-Daten erhält?

      Grundsätzlich sollten GET-Requests keine Änderungen auf dem Server verursachen (REST), daher rate ich Dir zu XMLHttpRequest, mit dem Du einen POST-Request abschicken kannst.

      
      
      > <?php
      > if (isset($_GET['Reload'])) {
      > 	$Reload = $_GET['Reload'];
      > } else {
      > 	$Reload = 30;
      > }
      > ?>
      
      

      Ich sehe keinen Hinweis auf eine Session. Wie erkennst Du denn Deinen Besucher wieder, um ihm die gewünschte Reload-Zeit zu geben?

      Liebe Grüße,

      Felix Riesterer.

      --
      "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
      1. Hallo Felix,

        Du musst nur in einer Schleife alle gefundenen <meta> daraufhin untersuchen, ob sie ein Attribut namens "http-equiv" haben. Dann hast Du das entsprechende Element und kannst den Attributwert als Eigenschaft lesen und schreiben.

        Das ist natürlich auch eine Möglichkeit ;-)

        Meine Alternativlösung ist daher das automatischen absenden des Formulars onchange="this.form.submit()" und PHP.

        Nicht gut. Da es sich um eine server-seitige Sache handelt, von der der User nicht gestört werden will...

        Es geht ja darum den Eigentlichen Seiteninhalt in einem Beliebigen Intervall zu aktuallisiern, um stets die aktuelleten Daten vom Server zu erhalten (z.B. die Anzahl an Datenbankeinträgen)... von daher ist die Sache m.E. eh immer Server-seitig.

        ...Dazu kann man entweder AJAX (neumodisch, kann GET und POST) verwenden (also ein XMLHttpRequest-Objekt), oder man erzeugt ein Bild (altmodisch, nur GET) und gibt seiner src-Eigenschaft die passende URL.

        Ist bestimmt eleganter, wäre aber für diese einzelne kleine Seite wie mit Kanonen auf Spatzen zu Schießen.

        Allerdings muss man es über GET machen, da es bei POST ansonsten immer wieder auf den Startwert zurückfällt:

        Bitte was? Du meinst, dass Dein PHP-Script keine vernünftigen $_POST-Daten erhält?

        Natürlich wird der Wert auch über POST richtig übergeben, allerdings eben nur bei Absenden des Formular (hier durch onchange). Bei einem Refresh werden hingegen kein Formulardaten an den Server übermittelt und bei PHP greift somit die else von if (isset($_POST[])), welche den Wert wieder auf die Grundeinstellung zurücksetzt. Ergo bleibt der geänderte Wert bei POST nur bis zur nächsten automatischen Aktualisierung, bei GET hingegen bis zur nächsten Änderung!

        Ich sehe keinen Hinweis auf eine Session. Wie erkennst Du denn Deinen Besucher wieder, um ihm die gewünschte Reload-Zeit zu geben?

        Ist hier ja nur ein Beispiel, bei dem alles überflüssige weg gelassen wurde.

        1. Lieber LastBoyScout,

          Ich sehe keinen Hinweis auf eine Session. Wie erkennst Du denn Deinen Besucher wieder, um ihm die gewünschte Reload-Zeit zu geben? Ist hier ja nur ein Beispiel, bei dem alles überflüssige weg gelassen wurde.

          aber wenn Du eine Session einsetzt, was hindert Dich daran, den POST-Wert in die Session zu schreiben? Dann ist er so lange verfügbar, bis ein neuer kommt. Steht noch kein Wert in der Session, schreibst Du den Default-Wert hinein und befüllst das content-Attribut ausschließlich mit dem Wert in der Session.

          Wo ist da das Problem?

          Liebe Grüße,

          Felix Riesterer.

          --
          "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
          1. Tach!

            aber wenn Du eine Session einsetzt, was hindert Dich daran, den POST-Wert in die Session zu schreiben?

            Alternativer Vorschlag: den sessionStorage (oder auch localStorage, wenn der Anwender den Wert nicht jedes Mal neu einstellen soll) auf dem Client verwenden, dann muss man den Wert nicht zum Server übertragen und dort behandelt werden. Der Server braucht den ja eigentlich gar nicht, wenn ich das richtig verstanden habe.

            dedlfix.