Javascript 如何在socketio返回中中继PHP函数/变量

Javascript 如何在socketio返回中中继PHP函数/变量,javascript,php,node.js,json,socket.io,Javascript,Php,Node.js,Json,Socket.io,我觉得这可能已经被问到了,并且已经尝试在这个网站上搜索我正在尝试做的事情的精确副本,但是每一个向我提出的类似问题都会询问关于使用PHP变量/函数的加载后JS的问题,这与我正在尝试做的事情并不匹配 我将从为什么我要问这个问题开始,而不是仅仅在Node中编写完整的代码,这将使问题变得更简单,答案只是由于任务的规模。这个项目已经开发了半年多了,几乎都是用PHP编写的,因此在这个时候,将大部分功能转换到Node是不可能的。我们已经把最终将所有PHP传输到NodeJ的时间表上了,但目前它必须是两者的混合,

我觉得这可能已经被问到了,并且已经尝试在这个网站上搜索我正在尝试做的事情的精确副本,但是每一个向我提出的类似问题都会询问关于使用PHP变量/函数的加载后JS的问题,这与我正在尝试做的事情并不匹配

我将从为什么我要问这个问题开始,而不是仅仅在Node中编写完整的代码,这将使问题变得更简单,答案只是由于任务的规模。这个项目已经开发了半年多了,几乎都是用PHP编写的,因此在这个时候,将大部分功能转换到Node是不可能的。我们已经把最终将所有PHP传输到NodeJ的时间表上了,但目前它必须是两者的混合,这虽然不理想,但却是我们资源的唯一选择

现在谈谈问题和准则;我们有一个聊天系统,它使用一个带有socket.io的NodeJS服务器,我已经为socket.io发出的返回建立了一个消息模板,但是,它们使用PHP变量。页面加载(包括聊天功能的任何页面)后,将运行一个PHP MySQL查询,该查询根据用户数据库中该用户的id进行查询,并返回该用户的多个值,这些值指示消息的显示方式以及用户对其他消息的选项。我将发布此li模板,向您展示我将遇到的明显问题

<li class="exampleMessageDELETE"><img src="<?=$userPicture?>" class="chatMessageUserPicture"><h2 class="chatUserName"><?php if($userRank == 7) { echo "[Owner]";} elseif ($userRank == 3) { echo "[Mod]";} elseif ($userRank == 5) { echo "[Admin]";} else {}?> <?=$_SESSION['userName']?></h2><?php if($userRank > 0) { ?><a id="chatMessageAdminOptions" href="">Mod</a> <?php } ?><a id="chatMessageOptions" href="">Options</a><p class="chatMessageContentText">This is an example message to set up the CSS class for chat messages... Stay tuned for updates...</p>
  • “class=“chatMessageUserPicture”>

    这是一条为聊天信息设置CSS类的示例消息…请继续关注更新

  • 正如您所看到的,一些显示的函数对于使聊天系统成为一个应有的系统非常重要,它们依赖于PHP代码。一些函数仅限于具有更高权限的用户,并且基于其他PHP变量和SQL返回显示用户名和标记

    目前,socketio捕获如下所示:

                socket.on('chatMessage', function(msg){
                    $('.chatMessageList').append($('<li>').text(msg));
                });
    
    socket.on('chatMessage',函数(msg){
    $('.chatMessageList')。追加($('
  • ')。文本(msg)); });

  • 现在我希望的解决方案是,将所有之前发布的LI发布到append函数中,并将每个PHP变量串联在一起,但由于我相信我对网站加载有一个初学者的知识,我认为不可能生成这些变量来输出post load,尤其是在JS函数中我想做的是在发送消息之前对所有变量进行JSON编码,并将其与消息一起发送,这将允许输出使用JSON变量转换为实际文本,然后输出,然而,这似乎非常复杂,可能忽略了可能存在的更简单的解决方案,即我在这里提出这个问题。同样,我不认为这与任何其他问题有直接关系,因为我不想通过前端javascript引用PHP函数,只是它输出的一个变量,它可能在后台的某种PHP变量缓存中存在,也可能不存在。我确信这句话听起来很愚蠢,而且它是很可能是这样,但这只是因为缺少一个更好的短语。我希望有任何解决方案不涉及完全重写我的代码。非常感谢任何帮助将所需值存储在js变量中,并在套接字侦听器中根据需要使用它们

    例:

    var userPicture=”“;
    socket.on('chatMessage',函数(msg){
    $(“.chatMessageList”).append(“
  • ”+msg+”
  • ”); });
    将所需值存储在js变量中,并在套接字侦听器中根据需要使用它们

    例:

    var userPicture=”“;
    socket.on('chatMessage',函数(msg){
    $(“.chatMessageList”).append(“
  • ”+msg+”
  • ”); });
    var userPicture = "<?php echo $userPicture;?>";
    socket.on('chatMessage', function(msg){
       $('.chatMessageList').append('<li><img src="' + userPicture + '" />" + msg + '</li>');
    });