0
我有一个聊天应用程序,它将消息添加到每个用户的阵列中。它设置为每隔一段时间抓取消息,然后将消息打印到客户端窗口。一旦它完成了,它应该从数组中移除消息,所以它将被视为未定义的,不再打印消息。在下面的代码中,我尝试了各种方式来让这个工作没有运气。我试图使用userMessage.user2.pop(),但控制台日志显示唯一弹出的项目是user1的第一个实例,之后它仍然构建数组。 splice()也不起作用。我不明白为什么这不起作用。我已经包括了我认为是唯一必要的代码来找到我的错误:无法删除阵列中的项目
var userMessage = [];
function getMessages() {
window.setInterval(function(userMessage) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:1337/update/', true)
xhr.send();
xhr.onload = function() {
var json = '{"messages":' + xhr.responseText + '}';
newMessages = JSON.parse(json);
userMessage = newMessages['messages'];
if (userId == "1") {
var i = (userMessage.user2.length) -1;
var message = document.createElement('p');
var text = document.createTextNode(userMessage.user2[i]);
console.log(text.textContent);
if(text.textContent != "undefined"){
message.appendChild(text);
chatRoom.appendChild(message);
message.scrollIntoView(true);
userMessage.user2.splice(-1,1);
}
}
if (userId == "2") {
var i = (userMessage.user1.length)-1;
var message = document.createElement('p');
var text = document.createTextNode(userMessage.user1[i]);
console.log(text);
if(text.textContent != "undefined"){
message.appendChild(text);
chatRoom.appendChild(message);
message.scrollIntoView(true);
console.log(userMessage);
userMessage.user1.splice(-1,1);
}
}
};
}, 2000);
*********后端代码******
var messages = {
user1 : [],
user2 : []
};
app.get('/random/:room/:userId/:message', function(req, res) {
fs.appendFile(room.number.toString(), req.params.message, function(err) {
if (err) {
console.log('error writing messages to file');
};
fs.readFile('./' + room.number, 'utf-8', function(err, data) {
if (err) {
if (err.fileNotFound) {
return this.sendErrorMessage('can\'t find the file, you linked it incorrectly');
}
console.log('error reading message file');
};
if (req.params.userId == 1) {
messages.user1.push(data);
} else {
messages.user2.push(data);
};
console.log(messages);
res.send(data);
fs.unlink(req.params.room, function(err) {
});
});
});
});
app.get('/update', function(req, res){
res.send(messages);
message.user1.pop();
message.user2.pop();
});
每次你的函数运行时,它会进行一次ajax调用,再次检索所有的消息。 (或者不这样做?你没有解释响应的格式是什么,它是否总是包含所有元素,但是URL似乎没有任何限制消息的参数。)在任何情况下,你都会覆盖'userMessage '每次都有最新的回应。** – nnnnnn
它的确如此。我也在后端弹出消息,但是只有在我给res.send后才会发送消息。谢谢。 – Mike
@nnnnnn - 我上面评论过,但我可能是错的。我将使用后端代码更新最初的帖子。 – Mike