Hallo zusammen :),
Ich bin gerade dabei einen Chat zu programmieren. Den unten stehenden JS-Code hab ich auf einer Vorlage aus dem Internet aufgebaut. Dieser funktioniert leider noch nicht (Der Konstruktor wird nicht aufgerufen). Es sollen mehrere Instanzen von diesem Chat auf einer Seite ausgegeben werden. Die ganze Thematik mit den prototypes als Klassenersatz habe ich aber auch noch nicht ganz verstanden. Deswegen bin ich mir absolut nicht sicher, ob ich die Methoden richtig definiere und aufrufe. Im Quellcode soll nur der Konstruktor aufgerufen werden und von dort aus die anderen Methoden. Eine mögliche Fehlerquelle könnte sein, dass ich die die Instanzen so initialisiere:
<script type="text/javascript">
var chat_<?php echo $interlocutor; ?> = new Chat(<?php echo $interlocutor; ?>);
</script>
Das heißt die Initialisierung findet im <body> statt. Der Code durchläuft mit PHP eine Schleife die für jeden Gesprächspartner einen Chat erstellt.
Hat jemand eine Idee was das Problem ist, bzw. wie ich es lösen könnte?
function Chat(i) {
this.interlocutor = i;
this.httpObject = null;
this.link = "";
this.timerID = 0;
this.UpdateTimer();
}
Chat.prototype.getHTTPObject = function(){
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) return new XMLHttpRequest();
else {
alert("Your browser does not support AJAX.");
return null;
}
};
Chat.prototype.setOutput = function (){
if(this.httpObject.readyState == 4){
var response = this.httpObject.responseText;
var objDiv = document.getElementById("result_"+this.interlocutor);
objDiv.innerHTML += response;
objDiv.scrollTop = objDiv.scrollHeight;
var inpObj = document.getElementById("msg_"+this.interlocutor);
inpObj.value = "";
inpObj.focus();
}
};
Chat.prototype.setAll = function (){
if(this.httpObject.readyState == 4){
var response = this.httpObject.responseText;
var objDiv = document.getElementById("result_"+this.interlocutor);
objDiv.innerHTML = response;
objDiv.scrollTop = objDiv.scrollHeight;
}
};
Chat.prototype.doWork = function (){
this.httpObject = getHTTPObject();
if (this.httpObject != null) {
this.link = "http://localhost/src/message.php?interlocutor="+this.interlocutor+"&msg="+document.getElementById('msg_'+this.interlocutor).value;
this.httpObject.open("GET", link , true);
this.httpObject.onreadystatechange = setOutput;
this.httpObject.send(null);
}
};
Chat.prototype.doReload = function (){
this.httpObject = getHTTPObject();
if (this.httpObject != null) {
this.link = "http://localhost/src/message.php?interlocutor="+this.interlocutor;
this.httpObject.open("GET", link , true);
this.httpObject.onreadystatechange = setAll;
this.httpObject.send(null);
}
};
Chat.prototype.UpdateTimer = function () {
this.doReload();
this.timerID = setTimeout(this.UpdateTimer(), 5000);
};
Chat.prototype.keypressed = function (e){
if(e.keyCode=='13'){
this.doWork();
}
};