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">×</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.
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
@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
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