Ich habe eine Chat-Klasse mit zwei Methoden: UpdateChat und sendChat.jquery Variable Umfang Problem
//chat.js
var state;
var room;
function Chat (theRoom) {
this.update = updateChat;
this.send = sendChat;
this.room = theRoom;
}
function updateChat(){
alert('ROOM: '+this.room);
$.ajax({
type: "POST",
url: "/chat/process.php",
data: {
'function': 'update',
'state': state,
'room': this.room
},
dataType: "json",
success: function(data){
if(data.text){
for (var i = 0; i < data.text.length; i++) {
$('#chat-area').append($("<p>"+ data.text[i] +"</p>"));
}
}
if(data.state)
state = data.state;
}
});
}
}
//send the message
function sendChat(message, nickname)
{
alert('A'+state); //20
//XXX
updateChat();
alert('B'+state); //20
$.ajax({
type: "POST",
url: "/live-event/chat/process.php",
data: {
'function': 'send',
'message': message,
'nickname': nickname,
'room': this.room
},
dataType: "json",
success: function(data){
alert('C'+state); //wrong!: 2 //it should be 20!
//XXX
updateChat();
alert('D'+state); //21
},
});
}
Der Konstruktor des Chat-Objekt:
var chat = new Chat(4); //4 = the number of the chat room
chat.send('test', 'tester');
Mein Problem sind die Verfahren bei den mit XXX markierten Stellen aufruft. In der updateChat() -Methode ist this.room nicht definiert, wenn ich die updateChat-Methoden wie diese aufrufen. Aber ich muss die Raumnummer übergeben, um den richtigen Status zu erhalten (Status ist einfach die Anzahl der Zeilen in der Textdatei des Chatrooms).
Ich denke, dass es ein Problem mit dem Variablenbereich oder mit den Methoden ist, die im Kontext des Objekts nicht aufgerufen werden.
In diesem Fall 'this.update() 'würde genauso gut funktionieren. – casablanca
@casablanca - +1 - yup auch wahr, wird aktualisiert, um –
Vielen Dank Nick (und Casablanca) zu enthalten. Das hat mein Problem gelöst. Wenn ich das erst ein paar Stunden vorher ausprobiert hätte. :-( – user478419