Ankündigung

Einklappen
Keine Ankündigung bisher.

Per JS einen PHP-Code regelmäßig ausführen lassen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Per JS einen PHP-Code regelmäßig ausführen lassen

    Hallo zusammen,

    ich habe mir eine Seite programmiert, deren Inhalt dynamisch per PHP generiert wird.

    Jetzt möchte ich, dass ein bestimmter Teilbereich der Seite regelmäßig aktualisiert wird.

    Zum Beispiel soll ein Newsticker nach dem Aufrufen der Seite alle 30 Minuten neu geladen werden, damit man die Seite nur einmal laden muss, aber ständig aktuelle Inhalte hat.

    Meine Idee ist bisher die:

    HTML-Code:
    <BODY>
      <DIV CLASS="Inhalt 1"><?php include 'inhalt1.php'; ?></DIV>
      <DIV CLASS="Inhalt 2"><?php include 'inhalt2.php'; ?></DIV>
      <DIV CLASS="Inhalt 3"><?php include 'inhalt3.php'; ?></DIV>
    </BODY>
    Jetzt möchte ich, dass zum Beispiel Inhalt 2 alle 30 Minuten neu geladen wird. Alle 30 Minuten soll also die Datei 'inhalt2.php" ausgeführt werden und im DIV-Container entsprechend aktuelle Inhalte ausgeben.

    Der Rest der Seite soll zu dem Zeitpunkt aber nicht unbedingt neu geladen werden.

    Wie kann ich das machen?

  • #2
    Bitte beachten: http://www.php.de/articles/regeln-un...inungsumfragen

    Zumindest ein eigener Ansatz sollte schon von dir kommen.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Okay, kann ich gerne machen.

      Also mein Ansatz ist so ein Script im Header:

      HTML-Code:
      function aktualisieren (Seite,ID,Zeit) { 
        var http = false; 
        if (navigator.appName == "Microsoft Internet Explorer") { 
          http = new ActiveXObject("Microsoft.XMLHTTP"); 
        } else { 
          http = new XMLHttpRequest(); 
        } 
        http.open("GET", Seite, true); 
        http.onreadystatechange=function() { 
          if(http.readyState == 4) { 
            document.getElementById(ID).innerHTML=http.responseText; 
          } 
        } 
        http.send(null); 
          window.setTimeout(aktualisieren(Seite,ID,Zeit), Zeit); 
        } 
      und an der entsprechenden Stelle der Seite:

      HTML-Code:
      <DIV ID="test">
        <script>aktualisieren ("test.php","test",1000);</SCRIPT>
      </DIV>
      Das geht aber nicht so richtig. Zwar aktualisiert sich der der DIV-Inhalt. Aber erstens rasend schnell und nicht jede Sekunde (1000 Millisekunden) und zweitens stockt das laden der Seite. Zum Beispiel werden die CSS-Schriften auch nicht geladen...

      Kommentar


      • #4
        setTimeout() erwartet eine Funktion als Parameter und nicht undefined. deswegen geht das auch rasend schnell.

        Kommentar


        • #5
          warum nimmst Du nicht "meta refresh" ?

          Kommentar


          • #6
            Weil ein "meta refresh" die komplette Seite neu lädt?

            Kommentar


            • #7
              zweitens stockt das laden der Seite. Zum Beispiel werden die CSS-Schriften auch nicht geladen...
              mir scheint das will der er auch, die ganze Seite neu laden.

              Kommentar


              • #8
                Zitat von Dormilich Beitrag anzeigen
                Weil ein "meta refresh" die komplette Seite neu lädt?
                Ja und?

                Kommentar


                • #9
                  Hallo zusammen,

                  danke für die Antworten bisher!

                  Genau: Die ganze Seite neu laden möchte ich eben nicht...

                  Weil:
                  1) Die Seite soll am Ende dauerhaft auf einem Monitor als Vollbild angezeigt werden und da soll das Bild sich nicht alle paar Minuten neu aufbauen.
                  2) Am unteren Rand der Seite läuft ein Lauftext, der nicht bei jedem Neuladen der Seite von vorne anfangen soll.
                  3) Die unterschiedlichen Inhalte in unterschiedlichen Zeiträumen per PHP Daten aus unterschieden APIs holen sollen - und manche APIs haben eine Abfrage-Limit. Manche kann ich also öfter abfragen, manche seltener.

                  Deshalb sollen die einzelnen Inhaltscontainer zu unterschiedlichen Zeiten mit neuem Inhalt befüllt werden.

                  Dormilich: Wie müsste ich denn mit setTimeout() sonst arbeiten? So vielleicht?

                  setTimeout(function(){ aktualisieren(Seite,ID,Zeit); }, Zeit);

                  Kommentar


                  • #10
                    Na dann - setTimeout() wird nur 1x ausgeführt, setInterval()regelmäßig. Ich dachte alle 30 Minuten wäre ein Neuladen verkraftbar...

                    http://www.w3schools.com/jsref/met_win_setinterval.asp

                    Kommentar


                    • #11
                      Hi,
                      wenn du aus irgendwelchen Gründen das nicht wie heutzutage üblich mit jquery machen möchtest, dann schau dir mal den alten Beitrag
                      Textdatei zyklisch mit Ajax einlesen
                      an. Dort hast du eine komplette Ajax-Funktion für ein zyklisches Einlesen inklusive Beispiel.
                      Diese Funktion trifft auch Vorkehrungen, um die gesamte Cacheproblematik zu meistern.

                      Kommentar


                      • #12
                        Hey Jspit,

                        ich bin auch für jquery offen, so ist das nicht... Kenne mich damit nur ehrlich gesagt nicht aus - und bei meiner Googlesuche war ich bisher immer bei so Lösungen wie der oberen gelandet.

                        Ich schau mir auch mal Ajax an, danke!

                        Kommentar


                        • #13
                          XMLHttpRequest (XHR) ist eine Programmierschnittstelle für JavaScript zum Übertragen von Daten über das HTTP-Protokoll. Entgegen dem Namen muss es sich bei diesen Daten nicht um XML handeln. XMLHttpRequest bildet einen Grundbaustein der Ajax-Technik.

                          Kommentar


                          • #14
                            Zitat von kaminbausatz Beitrag anzeigen
                            Na dann - setTimeout() wird nur 1x ausgeführt, setInterval()regelmäßig. Ich dachte alle 30 Minuten wäre ein Neuladen verkraftbar...
                            jetzt wissen wir ja, wieso man immer dickere Leitungen brauchst, alle 30 min die komplette Seite, tztztz.

                            benütze anstatt dem div ein iframe und du ka nnst es mit meta refresh machen:
                            https://developer.mozilla.org/en/doc...Element/iframe

                            Kommentar


                            • #15
                              setInterval erzwingt die Ausführung aber. Wenn ein PHP-Script mal nicht hinterherkommt und lange braucht, wird ständig ein Request hinzugeschaltet, wodurch dann mehrere Antworten fast gleichzeitig zurückkommen, verarbeitet werden und evtl eine frühere Antwort nach einer späteren Antwort verarbeitet wird. Hat das manchmal komische Folgen.

                              Besser ist, den nächsten Request via setTimeout zu starten, wenn der vorherige fertig ist. Der JS-Code wird nur geringfügig komplexer durch sowas.

                              Und ja, bei 30 Minuten ist das tatsächlich ziemlich egal... Wollte nur was schlaues schreiben.

                              Kommentar

                              Lädt...
                              X