我有一个使用PHP和Ratchet编写的小型聊天室。
在JS中,我有以下事件,它触发一个常规的js函数,该函数会在按下回车键时发生:
socket.onmessage = function(evt) {
var data = JSON.parse(evt.data);
addMessage(data.msg);
};
可以这样做,但是我希望在用户输入并发送消息之前,能够显示“用户正在输入”的提示信息。因此,我猜测需要手动调用onmessage
事件,这是否可行?
相关的JavaScript代码:
var chat = $('#chatwindow');
var msg = $('#messagebox');
function addMessage(msg) {
chat.append("<p>" + msg + "</p>");
}
msg.keypress(function( event ) {
if ( event.which != 13 ) {
return;
}
event.preventDefault();
if (msg.val() == "" || !open) {
return;
}
socket.send(JSON.stringify({
msg: msg.val()
}));
addMessage(msg.val());
msg.val("");
});
socket.onmessage = function(evt) {
var data = JSON.parse(evt.data);
addMessage(data.msg);
};
onmessage
事件发生是因为在你的代码中某处调用了它(你提到当用户按下回车键时),这会将它传递给服务器。这并不意味着你不能在其他地方发送它(比如当有人在输入时)。因为你可以随意修改数据,所以只需将事件作为一个键传递(例如socket.sendMessage({event: 'message', msg: 'testing'});
),这样你就可以在另一个客户端上解析出来。 - Blue{type: 'message', msg: 'testing'}
。当用户开始输入时,发送{type: 'typing'}
。在超时时间后发送{type: 'typingStopped'}
以通知其他用户他们不再停止。在另一个客户端上解析type
以确定发生了什么类型的事件(消息、打字或停止打字),并适当地触发处理程序。 - BluenotifyUserTyping
函数在socket.onmessage
中被调用,发生在另一端(接收方),有没有办法选择端?因为这样我看不到如何检查发送方是否停止输入,我正在检查消息框是否在几秒钟后为空,但是这会检查接收方的消息框。如果您愿意,我可以为此提出新问题。 - user6562256onmessage
事件中解析它。 - Blue