所以我关注了几个关于类似问题的问题,但是,这些问题及其适当的解决方案是多年前的,从那时起,socket.io 已经看到了几次更新,导致他们的代码无法使用。我尝试对其进行调整以适应 v2.3.0,但它不起作用。
我正在尝试制作一个聊天应用程序,其中有几个我试图在每个 io.emit 事件中发出的变量(图片、名称、标签、消息等)
目前,我的服务器端代码如下所示:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
显然不仅仅是这个,但这是唯一相关的代码,其余部分按其应有的方式运行。在我的客户端,每个事件都会随事件一起发送所有变量(我相信)。它看起来像这样:
var userName = "<?=$_SESSION['userName'];?>"
var userTag = "<?php if($userRank == 7) { echo "[Owner]";} elseif ($userRank == 3) { echo "[Mod]";} elseif ($userRank == 5) { echo "[Admin]";} else {}?>"
var userPicture = "<?=$userPicture?>"
$('.chatMessageSubmitForm').submit(function(e){
e.preventDefault();
e.stopPropagation();
socket.emit('chatMessage', { message: $('#messageField').val(), username: userName, tag: userTag, userpiclink: userPicture});
$('#messageField').val('');
return false;
});
socket.on('chatMessage', function(msg){
$('.chatMessageList').append($('<li><img src="'+ postpiclink + '"class="chatMessageUserPicture"><h2 class="chatUserName">' + sendertag + sendname + '</h2>').text(sendmessage));
});
据我所知,格式应该正确,但是当我尝试发送聊天消息时,我的服务器终端上会显示以下消息:
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
ReferenceError: username is not defined
我并不是完全脑残,所以显然当套接字发出用户名变量时它没有接收到它,但我不知道为什么。任何帮助将不胜感激。
最佳答案
当您在客户端中执行此操作时:
socket.emit('chatMessage', { message: $('#messageField').val(), username: userName, tag: userTag, userpiclink: userPicture});
这意味着当您在此处的服务器中收到它时:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: username, sendertag: tag, postpiclink: userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
这意味着 msg
将是您发送的整个对象。因此,如果您想要该对象的用户名,您需要引用:
msg.username
不只是
username
所以,你应该更改为:
socket.on('chatMessage', function(msg){
io.emit('chatMessage', { sendmessage: msg, sendname: msg.username, sendertag: msg.tag, postpiclink: msg.userpiclink });
console.log('message: ' + sendmessage + sendname + sendertag + postpiclink);
});
仅供引用,发送整个 msg
对象,然后在同一条消息中再次发送三个单独的属性是多余的。您实际上将这三个属性发送了两次。
关于javascript - 多变量 socket.io 发出的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59481292/