Heute habe ich kurz darüber nachgedacht, wie man in JavaScript eine serverseitige Push-Funktion implementieren kann.
Eine Möglichkeit wäre es, den Status ständig abzurufen, wie zum Beispiel mit folgendem Code:
function checkServer() {
new Ajax.Updater('server.php', {
method: 'get',
onSuccess: function(transport) {
if (parseInt(transport.responseText)) checkServer();
else doStuff(transport.responseText);
}
});
}
Die prototype-Library als Framework vorausgesetzt.
Dabei wird im obigen Quelltext solange das serverseitige Skript aufgerufen, bis es denn eine Lösung gibt, als Anwendungsfall kann man sich eine langwierige Datenbankoperation vorstellen, die sonst nichts, nicht mal ein HTML-Template, zurückgibt.
Denn wenn etwas kommt, ist der Prozess zu Ende.
Ein anderer Ansatz ist, vorausgesetzt man kann eine Session lange offen halten, dass man den Status der Übertragung überprüft und eben darauf reagiert.
Dies ist auf jeden Fall die elegantere Lösung die weniger Queries verursacht, aber wegen der langen Sessions etwas unsicherer, bei zum Beispiel schlechten Internetzugängen oder DSL Timeouts, ist, aber schöner funktioniert:
var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
xmlHTTP.onreadystatechange = handleStateChange;
function handleStateChange() {
if (xmlHTTP.readyState == 3) {
alert(xmlHTTP.responseText);
}
}
xmlHTTP.open("POST", "/server.php", true);
xmlHTTP.send();
Oder fällt jemanden auf Anhieb eine bessere Möglichkeit ein, wenn man auf der Seite des Client nur einen Webbrowser mit JavaScript zur Verfügung hat?
Besserung ist wohl nicht zu erwarten, denn wie hier bei heise steht, wird am XMLHttpRequest nichts mehr verändert. Super.
[...] im vorherigen Artikel geschrieben, befindet sich nicht nur das XMLHttpRequest vom W3C im Status “Last Call”, [...]