Hey,
ich habe folgendes Problem:
ich gebe aus wie viel User on- und offline sind. Das klappt auch. Damit auch zeitnah erkannt wird ob der User online, offline ist oder schreibt führe ich ein Request durch der die Daten alle 3 Sekunden aktualisiert. Die Daten gebe ich in einem Accordion aus.
Wenn ich das Accordion jetzt öffne, dann schließt es immer wieder, oder wenn ich es offen anzeige und der User es schließt wird es wieder offen angezeigt, wegen dem Request.
Ich weiß grad nur nicht wie ich dies unterbinden kann, dass trotz Live-Akutalisierung des Userstatuses, das Accordion sich nicht wieder öffnet, bzw wenn es offen ist schließt.
Das ist der JS-Code:
JavaScript
function getUserHistroy(){
var req = new XMLHttpRequest();
req.addEventListener("load", function(){
document.getElementById("userHistory").innerHTML = this.responseText;
});
req.open("GET", "includes/userHistory.php", true);
req.send();
}
getUserHistroy();
function refreshUserHistory(){
$.ajax({
url: "includes/userHistory.php",
type: "GET",
async: true,
cache: false,
success: function (data, textStatus) {
$("#userHistory").html(data);
setTimeout(refreshUserHistory, 3000);
},
})
.done(function() {
})
.fail(function(error) {
setTimeout(refreshUserHistory, 3000);
});
}
refreshUserHistory();
Alles anzeigen
und das die userHistory.php
PHP
<?php
session_start();
try{
$dbv = new PDO("mysql:host=127.0.0.1;dbname=chat;charset=utf8", "root", "");
$selectUserHistory = $dbv->prepare("SELECT ua.userActions,
ua.actionImage,
u.username
FROM useraktionen ua
LEFT JOIN users u ON ua.userId = u.userId
");
$selectUserHistory->execute();
$userHistory = $selectUserHistory->fetchAll(PDO::FETCH_ASSOC);
foreach ($userHistory as $historyKey => $value) {
if($value["userActions"] == "online")
$onlineUsers[] = $value;
if($value["userActions"] == "offline")
$offlineUsers[] = $value;
if($value["userActions"] == "Writing")
$onlineUsers[] = $value;
}
$countOnlineUser = count($onlineUsers);
$countOfflineUser = count($offlineUsers);
echo '<div id="accordion">
<div class="card">
<div class="card-header" id="onlineUsers">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">Online Users (' . $countOnlineUser . ')</button>
</h5>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="onlineUsers" data-parent="#accordion">
<div class="card-body">';
if(isset($onlineUsers)){
foreach ($onlineUsers as $key => $value) {
echo "<p class='mb-0'>" . $value['actionImage'] . " ". htmlspecialchars($value["username"]) . "</p>";
}
}
echo '</div>
</div>';
echo'<div class="card">
<div class="card-header" id="offlineUsers">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne1" aria-expanded="false" aria-controls="collapseOne1">Offline Users ('. $countOfflineUser . ')</button>
</h5>
</div>
<div id="collapseOne1" class="collapse show" aria-labelledby="offlineUsers" data-parent="#accordion">
<div class="card-body">';
if(isset($offlineUsers)){
foreach ($offlineUsers as $key => $value) {
echo "<p class='mb-0'>" . $value['actionImage'] . " ". htmlspecialchars($value["username"]) . "</p>";
}
}
echo '</div>
</div>
</div>';
}catch(EXCEPTION $a){
echo "Ein Fehler ist aufgetreten: " . $a->getMessage();
exit();
}
Alles anzeigen
Grüße,
Stef