Ankündigung

Einklappen
Keine Ankündigung bisher.

Long Polling

Einklappen

Neue Werbung 2019

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

  • Long Polling

    Ich kam vor ein paar Monaten mal mit Long Polling/ Comet in Kontakt, habe es allerdings nicht verstanden, obwohl ich mir wirklich sehr viele Tutorials durchgelesen habe und Videos geschaut habe. Dann habe ich es aufgegeben und jetzt bin ich wieder darauf angewiesen. Wieder will ich es einfach nicht verstehen!

    Am Beispiel eines Codes, welchen ich von einem Tutorial habe, habe ich mir mal einen kleinen Chat bauen versucht.

    chat.php
    Code:
    	<script type="text/javascript">
    		function checkForNewMessages()
    		{
    		    $.ajax({
    		        type: "GET",
    		        url: "chat2.php",
    		        async: true,
    		        cache: false,
    		        timeout: 300000
    		    }).done(function(result) {
    		        if(result.messageReceived) {
    		            alert("Message received!");
    		        }
    		        else
    		        {
    		        	alert("Message NOT received.");
    		        }
    		        checkForNewMessages();
    		    });
    		};
    
    		checkForNewMessages();
    	</script>
    chat2.php
    PHP-Code:
    <?php
    $db 
    mysqli_connect("localhost""root""123""chat");

    function 
    datenbankAuslesen() {
        
    $getMessages mysqli_query($db"SELECT * FROM messages");
        
    $message mysqli_fetch_assoc($getMessages);
        return 
    $message["message"];
    }

    $message datenbankAuslesen();
    while(!
    $message)
    {
        
    sleep(5);
        
    $message datenbankAuslesen();
        echo 
    $message;
    }
    Das Ergebnis wenn ich chat.php aufrufe ist, dass gar nichts passiert. Um das zu testen, hatte ich die alerts eingefügt, welche so wie ich das Script verstehe auf jeden Fall aufpoppen sollten - einer davon. Ein Alert direkt zu Beginn der Funktion, vor dem AJAX Teil, funktioniert.

  • #2
    Fügst du denn auch etwas in die Datenbank ein, während das Script läuft?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      In dem Chat, den ich zwecks Test gemacht habe, werden die Chatnachrichten in der Datenbank gespeichert.

      Kommentar


      • #4
        PHP-Code:
        $db mysqli_connect("localhost""root""123""chat"); 

        function 
        datenbankAuslesen() { 
            
        $getMessages mysqli_query($db"SELECT * FROM messages"); 
            
        $message mysqli_fetch_assoc($getMessages); 
            return 
        $message["message"]; 

        Debuggen!

        $db ist innerhalb der Funktion nicht bekannt...
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          PHP-Code:
          $db mysqli_connect("localhost""root""123""chat"); 

          function 
          datenbankAuslesen() { 
              global 
          $db;
              
          $getMessages mysqli_query($db"SELECT * FROM messages"); 
              
          $message mysqli_fetch_assoc($getMessages); 
              return 
          $message["message"]; 

          Ok, das hatte wohl gefehlt, aber trotzdem passiert gar nichts.

          Kommentar


          • #6
            Hallöchen,

            Zitat von String Beitrag anzeigen
            PHP-Code:
            $db mysqli_connect("localhost""root""123""chat"); 

            function 
            datenbankAuslesen() { 
                global 
            $db;
                
            $getMessages mysqli_query($db"SELECT * FROM messages"); 
                
            $message mysqli_fetch_assoc($getMessages); 
                return 
            $message["message"]; 

            Ok, das hatte wohl gefehlt, aber trotzdem passiert gar nichts.
            Ein Hinweis: Abhängigkeiten löst man nicht auf indem man den globalen Namensraum vollmüllt, sondern indem man die notwendigen Paramter in die jeweilige Klasse / Methode / Funktion injiziert:

            PHP-Code:
            function doSomething(DatabaseInterface $db){
                
            $db->fetchSomething();

            PHP-Code:
            class MyClass{
                private 
            $db null;

                public function 
            __construct(DatabaseInterface $db){
                    
            $this->db $db;
                }

            Viele Grüße,
            lotti
            [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

            Kommentar


            • #7
              Zitat von String Beitrag anzeigen
              Ok, das hatte wohl gefehlt, aber trotzdem passiert gar nichts.
              Wie gesagt: Debugging...

              Mit "gar nichts" als Ausgangslage können wir dir auch "gar nichts" raten, außer das du selber suchen musst.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar

              Lädt...
              X