2016-09-19 3 views
0

ich einen Code haben, der auf meine Fußzeile über Jquery geladen wird (So, dass jeder besuchten Seite hat den Code auf seiner Seite)Nachricht des Tages System

Dieser Code soll eine Datenbank überprüfen und, wenn Alle Antworten senden ein Bootstrap-modal an den Client. Wenn das Modal gesendet wird, wird die Zeile aus der Datenbank gelöscht. Jeder Benutzer hat seine eigene Zeile in der Datenbank, wenn eine Aktualisierung stattfindet.

Der Fußzeilencode wird alle 10 Sekunden neu geladen, um zu überprüfen, ob Updates für die relative Tabelle vorhanden sind.

Dies funktioniert, außer, auch nachdem die Zeile gelöscht wurde, scheint PHP Code innerhalb meiner If-Blöcke auszuführen, die nicht ausgeführt werden sollten, da es das Modal veranlasst, sich gegenseitig zu schließen oder zu stapeln und den Client zwingt um ihre Seite neu zu laden, um weiter zu surfen.

So sagen wir, ein Client lädt die Indexseite, und sie haben eine ausstehende Nachricht auf sie warten. Das Modal wird gesendet, damit der Benutzer manuell schließt. Wenn der Benutzer mehr als 10 Sekunden wartet, schließt sich das Modal selbst, aber der Hintergrund bleibt bestehen, so dass der Benutzer nichts klicken kann, bis die Seite neu geladen ist. Wenn der Benutzer weitere 10 Sekunden wartet, wird ein weiterer Hintergrund hinzugefügt, der den Bildschirm verdunkelt. Dies geschieht so lange, bis der Bildschirm vollständig schwarz ist oder der Client die Seite neu lädt.

Der Code, der das Modal öffnet, ist innerhalb von 2 if-Blöcken, die grundsätzlich angeben, dass es nicht ausgeführt werden sollte.

Hier ist mein Nachladen Code:

<? 

    include("dbConnect.php"); 

    $sql = "SELECT DISTINCT Message,uniqueID from sendMessage WHERE UserID='".$_GET['userID']."';"; 

    $ret = $db->query($sql); 

    $loop = 0; 

    $messages = array(); 

    if (session_status() == PHP_SESSION_NONE) { 
     session_start(); 
    } 

    while($row = $ret->fetchArray(SQLITE3_ASSOC)){ 

     $loop++; 

     array_push($messages,array("uniqueID" => $row['uniqueID'], "Message" => $row['Message'])); 

    } 


    if($loop != 0) { 
     if(!empty($messages)) { 

      ?> 

      <script type="text/javascript"> 
       $(document).ready(function() { 
        $('.modal').modal('hide'); 
        $('#memberModal').modal('show'); 
       }); 
      </script> 

      <!-- Modal --> 
      <div class="modal fade" id="memberModal" tabindex="-1" role="dialog" aria-labelledby="memberModalLabel"> 
       <div class="modal-dialog" role="document"> 
        <div class="modal-content"> 
         <div class="modal-header"> 
          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
          <h4 class="modal-title" id="memberModalLabel">Message from Administrators</h4> 
         </div> 
         <div class="modal-body"> 
          <? 
          foreach($messages as $v) { 
           echo $v['Message']; 
           if($loop > 1) { 
            echo "<br><br>"; 
           } 
          } 
          ?> 
         </div> 
         <div class="modal-footer"> 
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
         </div> 
        </div> 
       </div> 
      </div> 
      <? 

      foreach($messages as $v) { 
        $sql2 = "DELETE from sendMessage where uniqueID='".$v['uniqueID']."';"; 
        $ret2 = $db->exec($sql2); 
      } 


     } 
    } 

    ?> 

Soweit ich das beurteilen kann, alle Einfuhren richtig sind (sonst die modale würde überhaupt nicht funktionieren, oder?)

Hier ist die jquery in meiner Fußzeile:

  <div id="links"></div> 
      <script> 
       function loadlink(){ 
        $('#links').load('templates/sendMessage.php?userID=<?=$userInfo['uniqueid'];?>',function() {}); 
       } 

       loadlink(); // This will run on page load 
       setInterval(function(){ 
        loadlink() // this will run after every 5 seconds 
       }, 10000); 
      </script> 

--edit--

Ich vermute, dass mein Problem darin besteht, dass das Div erneut geladen wird, während das Modal geöffnet ist, und es daher bricht, weil es den Code löscht, in dem sich das Modal befindet. Ich weiß nicht, wie ich das bekämpfen soll.

+0

Ist die DELETE-Anweisung erfolgreich Zeilen entfernen? Wenn ja, haben Sie überprüft, dass der zweite und spätere Aufruf von sendMessage.php keine zwischengespeicherten Antworten verwendet? GET-Anforderungen werden häufig von Browsern zwischengespeichert, es sei denn, Ihr Server ist so konfiguriert, dass ein solches Verhalten verhindert wird. – Steve

+0

@Steve Es entfernt die Zeilen, ja. Hast du meine Bearbeitung gelesen? Ist das eine Möglichkeit? Wie kann ich überprüfen, ob es eine zwischengespeicherte Antwort verwendet? – GrumpyCrouton

+0

Verwenden Sie die Netzwerkregisterkarte in Chrome, um festzustellen, ob es sich um eine zwischengespeicherte Antwort handelt, oder aktivieren Sie das Kontrollkästchen "Cache deaktivieren" auf der Netzwerkregisterkarte, um nicht zwischengespeicherte Anforderungen zu testen – Steve

Antwort

0

Der Code ist nicht vollständig, sondern von dem, was ich Ihrem Ajax-Skript nur sagen kann, sollte den Inhalt der modalen senden, nicht den ganzen modal, append() es in (oder html() verwenden, wenn Sie die vorherigen Nachrichten entfernen mögen) <div class="modal-body"> und dann das Modal zeigen. Jetzt fügen Sie den Modalcode in das Modal ein und erhalten einen Babuschka-Effekt.

- EDIT -

In PHP-Skript, kehren die Nachrichten, nicht nur das modale html:

[...] 
if($loop != 0) { 
    if(!empty($messages)) { 
     foreach($messages as $v) { 
      echo $v['Message']; 
      if($loop > 1) { 
       echo "<br><br>"; 
      } 
     } 
[...] 

Die in der Fußzeile

<!-- Modal --> 
     <div class="modal fade" id="memberModal" tabindex="-1" role="dialog" aria-labelledby="memberModalLabel"> 
      <div class="modal-dialog" role="document"> 
       <div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
         <h4 class="modal-title" id="memberModalLabel">Message from Administrators</h4> 
        </div> 
        <div class="modal-body"> 
         // mesages will be inserted here 
        </div> 
        <div class="modal-footer"> 
         <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
        </div> 
       </div> 
      </div> 
     </div> 

     <script> 
      function loadlink(){ 
       $('.modal-body').load('templates/sendMessage.php?userID=<?=$userInfo['uniqueid'];?>',function() { 
        // maybe add a condition to see if nothing is returned 
        // and not show it 
        $('#memberModal').modal('show'); 
       }); 
      } 

      loadlink(); // This will run on page load 
      setInterval(function(){ 
       loadlink() // this will run after every 5 seconds 
      }, 10000); 
     </script> 
+0

Es tut mir leid, was meinen Sie, dass der Code nicht vollständig ist ? Ich habe dir jedes Stück Code gegeben, das relevant ist. – GrumpyCrouton

+0

Ich meine die html. Wie auch immer, abgesehen davon, hast du die Lösung versucht? – iliaz

+0

Ich bin nicht wirklich sicher, wie das geht – GrumpyCrouton

Verwandte Themen