Hallo Meowsalot,
hättest Du das Handy etwas mehr nach rechts geschwenkt, hätte ich mich vielleicht im Bild wiedergefunden 😂. In Mülheim bist Du also.
Ein Semikolon am Zeilenende ist noch gut.
Und - wenn Du das so machst, entsteht das kleine Problem der Variablenlebensdauer. Du setzt das in eine Readyhandler-Funktion, und maxIdToDos lebt damit genau so lange wie der Scope dieser Funktion.
Das muss nicht falsch sein. Du musst aber dann INNERHALB dieses Readyhandlers auch den Intervalltimer aufsetzen, damit der auf maxIdToDos Zugriff hat. Ein bisschen was zu Variablen und Scopes findest Du hier, wenn Du Dir unsicher bist, was ich meine.
$(document).ready(function(){
var maxIdToDos = <?php echo getMaxIdToDos($mysqli); ?>;
var refreshing = false;
setInterval(refreshPostings, 5000);
function requestPostingUpdate() {
if (refreshing) return;
ajaxGetListUpdate(maxIdToDos)
.then(acceptPostingUpdate, failedPostingUpdate)
}
function acceptPostingUpdate(result) {
// ergebnis in table einarbeiten
maxIdToDos = result.maxIdToDos;
refreshing = false;
}
function failedPostingUpdate() {
refreshing = false;
}
});
ajaxGetListUpdate ist eine Funktion, die anderswo stehen kann und die den eigentlichen Ajax-Call durchführt. Das kannst Du zum Beispiel mit $.getJSON machen. Ab jQuery 1.5 bekommst Du davon ein Promise zurück, auf dessen Ergebnis Du mit .then warten kannst. D.h. du gibst aus ajaxGetListUpdate einfach das Ergebnis von $.getJSON zurück und übergibst keinen dritten Parameter an getJSON.
Alternativ kannst Du auch das Fetch-API von Javascript verwenden. Aber wenn du jQuery eh schon drin hast, kannst Du es auch benutzen :)
Viel mehr sollte das als Hauptsteuerung nicht werden. Da, wo // Ergebnis in Table einarbeiten
steht, rufst Du eine weitere Funktion auf die sich um das Anhängen der neuen Rows an die Table kümmert. Ich hinterfrage jetzt nicht, ob eine Table das richtige HTML Konstrukt für den Zweck ist oder nicht...
Im PHP erzeugst Du eine Rückgabestruktur, die sich passend als JSON Objekt aufbereiten lässt. Mein Beispielcode geht davon aus, dass das Rückgabeobjekt eine Eigenschaft maxIdToDos besitzt. Für die neuen Zeilen baust Du eine weitere Eigenschaft ein, die die Zeilen als Array enthält. Du solltest dabei schon in PHP die htmlspecialchars-Aufbereitung vornehmen.
Du solltest den PHP-Code, den Du eingangs gezeigt hast, auch noch etwas modularisieren. Denn das Aufbereiten einer DB-Zeile als Table-Row brauchst Du für die Erstanzeige und auch für den Ajax-Call.
Mehr kau ich nun nicht vor, ich denke, du hast jetzt erstmal einiges zu recherchieren :)
Rolf
sumpsi - posui - clusi