Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过AJAX将PHP变量传递给JavaScript(聊天应用程序)_Javascript_Php_Jquery_Ajax_Node.js - Fatal编程技术网

通过AJAX将PHP变量传递给JavaScript(聊天应用程序)

通过AJAX将PHP变量传递给JavaScript(聊天应用程序),javascript,php,jquery,ajax,node.js,Javascript,Php,Jquery,Ajax,Node.js,嗨 我正在尝试创建一个聊天应用程序为我的网站,其中有用户(注册,登录等)。我使用NodeJS作为聊天服务器,因此可以使用SocketIO 我有一个index.php,其中我设置了一个带有文本字段和提交按钮的表单。 要检索用户名,我在顶部有一段方便的代码: $stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid"); $stmt->execute(array(":uid"=>$_SESSION

我正在尝试创建一个聊天应用程序为我的网站,其中有用户(注册,登录等)。我使用NodeJS作为聊天服务器,因此可以使用SocketIO

我有一个index.php,其中我设置了一个带有文本字段和提交按钮的表单。 要检索用户名,我在顶部有一段方便的代码:

$stmt = $user_home->runQuery("SELECT * FROM tbl_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
因此,我可以通过
$row['username']访问用户名

我在insertMessage.php中也这样做了,因此将带有消息的用户名插入到数据库中效果很好。 但是我不知道如何在client.js中找到它,它有以下代码:

    $( "#messageForm" ).submit( function() {
    var nameVal = $( ); <-------- don't know what to put in here :S
    var msg = $( "#messageInput" ).val();

    socket.emit( 'message', { name: nameVal, message: msg } );

    $.ajax({
        url: "../ajax/insertMessage.php",
        type: "POST",
        data: { name: nameVal, message: msg },
        success: function(data) {

        }
    });

    return false;
});

socket.on( 'message', function( data ) {
    var actualContent = $( "#messages" ).html();
    var newMsgContent = 'Name: ' + data.name + ' Message:' + data.message;
    var content = actualContent + newMsgContent;

    $( "#messages" ).html( content );
});
$(“#messageForm”).submit(函数(){

var nameVal=$();我想您有类似于$\u会话['username']的东西

可选1: 放入隐藏的输入
您可以尝试以下方法:

将数据插入数据库时,只需发送文本消息。从会话中检索发送消息的用户

// Send only the message
// in insertMessage.php retrieve the user from session.
// in response send the username and the message back to the client as json
// after retrieving the response you can emit your socket event
$.ajax({
        url: "../ajax/insertMessage.php",
        type: "POST",
        data: { message: msg },
        success: function(data) {
            data = $.parseJSON(data);
            username = data.username;
            message = data.message;
            socket.emit( 'message', { name: username, message: message} );
        }
    });

虽然不是最理想的解决方案,但您绝对可以尝试一下。

也没有人知道该放什么,因为您没有发布有关HTML表单外观的任何信息。我使用了教程中的代码,在该教程中,不仅有消息文本字段,还有用户名文本字段。但是,因为我已经我有一个用户系统,我想去掉用户名字段,但我真的不知道怎么做,谷歌搜索“将PHP变量转换为javascript”更让我困惑:你是唯一知道“用户名”在哪里的人值应该来自。它是一个表单字段吗?客户端框架中的某个内容?其他内容?我在问题中写道:“这样我就可以通过$row['username']访问用户名了。”对不起,我弄错了,我没有读对。你能像@Pointy所说的那样给我们你的HTML吗?如果你使用了教程中的代码,给我们一个链接。因为只有上帝、你和教程作者知道nameVal值(注:我已经删除了我的答案),问题的标题确实是“将PHP变量传递到ajax中”,但问题的内容似乎正好相反。谢谢你的回答!但是有没有办法将var nameVal设置为用户名,而不是调用警报?选项2不起作用,因为它是一个client.js文件,但是第一个设置隐藏输入的选项非常好!非常感谢!)
<script>
var nameVal= <?php echo $_SESSION['username'];?>; //do this rigth before you call js script that will process this var.
</script>
<script src="client.js"></script>
// Send only the message
// in insertMessage.php retrieve the user from session.
// in response send the username and the message back to the client as json
// after retrieving the response you can emit your socket event
$.ajax({
        url: "../ajax/insertMessage.php",
        type: "POST",
        data: { message: msg },
        success: function(data) {
            data = $.parseJSON(data);
            username = data.username;
            message = data.message;
            socket.emit( 'message', { name: username, message: message} );
        }
    });