Hi, folgendes Problem:
Ich bin dabei, einen kleinen Chat zu programmieren. Ich nutzte Server Site Events (SSE) um aller 2 Sekunden neue Nachrichten zu übertragen, das klappt wunderbar. Manchmal ist es notwendig, Nachrichten zwischendurch ein zusätzliches Mal nachzuladen. Zu diesem Zwecke habe ich ein kleines Ajax Skript (siehe weiter unten). Dieses ruft das php script auf, welches eigentlich auf die SSE Anfragen antwortet, nur dass hier die header für SSE nicht mit übergeben werden. Demnach wird die Ausgabe enstprechend verarbeitet.
Folgender Fehler tritt bei der Ausführung auf:
in der Zeile
Grund hierfür ist die Variable 'chat_read_channel'.
Sie teilt die Nachrichten auf 3 verschiedene Channel auf. Nehme trage ich als id z.B. 'chat_msgs_1' ein, klappt das ganze, ist halt nur nicht mehr dynamisch.
Merkwürdig ist zum Einen, dass die gleiche Konstruktion innerhalb der SSE funktion funktioniert und zum anderen das Verhalten der Variable:
wirft '1' aus (oder eben '2', oder '3';
ergibt 'string'
ergibt nicht Gleich
ergibt:
chat_msgs_1
chat_msgs_1
Beide Ausgaben sind vom Typ string.
Woran kann das nur liegen?
Vielen Dank für eure Hilfe
Ich bin dabei, einen kleinen Chat zu programmieren. Ich nutzte Server Site Events (SSE) um aller 2 Sekunden neue Nachrichten zu übertragen, das klappt wunderbar. Manchmal ist es notwendig, Nachrichten zwischendurch ein zusätzliches Mal nachzuladen. Zu diesem Zwecke habe ich ein kleines Ajax Skript (siehe weiter unten). Dieses ruft das php script auf, welches eigentlich auf die SSE Anfragen antwortet, nur dass hier die header für SSE nicht mit übergeben werden. Demnach wird die Ausgabe enstprechend verarbeitet.
Folgender Fehler tritt bei der Ausführung auf:
Code:
Uncaught TypeError: Cannot read property 'appendChild' of null
Code:
document.getElementById('chat_msgs_' + chat_read_channel).appendChild(msg);
Grund hierfür ist die Variable 'chat_read_channel'.
Sie teilt die Nachrichten auf 3 verschiedene Channel auf. Nehme trage ich als id z.B. 'chat_msgs_1' ein, klappt das ganze, ist halt nur nicht mehr dynamisch.
Merkwürdig ist zum Einen, dass die gleiche Konstruktion innerhalb der SSE funktion funktioniert und zum anderen das Verhalten der Variable:
Code:
console.log("'" + chat_read_channel + "'");
Code:
console.log(typeof(chat_read_channel));
Code:
if('chat_msgs_1' == 'chat_msgs_' + chat_read_channel) {
console.log('Gleich');
} else {
console.log('nicht Gleich');
}
Code:
console.log('chat_msgs_1');
console.log('chat_msgs_' + chat_read_channel);
chat_msgs_1
chat_msgs_1
Beide Ausgaben sind vom Typ string.
Woran kann das nur liegen?
Vielen Dank für eure Hilfe
Code:
// Neue Nachrichten einmal per ajax laden
function chat_read_once() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 0) {
document.getElementById("chat_message").value = "Bitte warten";
}if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("chat_message").value = "";
var chat_read_channel;
var channel_new_msg = new Array(false, false, false);
var msg_array = xmlhttp.responseText.split("\n");
var msg_act_line;
for(var i = 1; i < msg_array.length; i++) {
msg_act_line = msg_array[i].split(" ",2)[1];
if(typeof(msg_act_line) === 'undefined') {
continue;
}
if(msg_act_line.split(",")[0] == 'channel') {
chat_read_channel = msg_act_line.split(",")[1];
channel_new_msg[chat_read_channel] = true;
continue;
}
var msg_time = msg_act_line.split(",")[0];
var msg_username = msg_act_line.split(",")[2].substr(0, msg_act_line.split(",")[1]);
var msg_content_array = msg_act_line.split(",");
msg_content_array.shift();
msg_content_array.shift();
var msg_content = msg_content_array.join(",");
msg_content = msg_content.substr(msg_act_line.split(",")[1]);
var msg = document.createElement('div');
msg.innerHTML = '<a class="chat_username" href="?link=message&action=write&msg_to=' + msg_username + '">' + msg_username + '</a> <span class="chat_time">' + msg_time + '</span><br><span class="chat_content">' + msg_content + '</span>';
document.getElementById('chat_msgs_' + chat_read_channel).appendChild(msg);
if(document.getElementById('chat_autoscroll_' + chat_read_channel).checked === true) {
chat_scroll_bottom(chat_read_channel);
}
}
}
};
xmlhttp.open("GET", '?link=chat_stream', true);
xmlhttp.send();
}