Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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
Javascript socket.io登录系统必须刷新窗口_Javascript_Node.js_Sockets_Socket.io - Fatal编程技术网

Javascript socket.io登录系统必须刷新窗口

Javascript socket.io登录系统必须刷新窗口,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我正在编写一个简单的登录系统。用户必须引入昵称,无需密码。如果已选择昵称,则通知用户soI used alert。如果昵称是免费的,用户会被告知是免费的。我正在服务器中使用express。以及服务器和客户端中的socket.io。 这东西或多或少起作用了 正如你所看到的,它是有效的。 但是如果我引入了一个无效的名称,表单就会被禁用。我的意思是,如果a想再次发送昵称,我必须重新加载页面。 以下是客户端的代码: 你可以在下面的答案中发布你是如何做到的,而不是在你的问题中添加[已解决]。我本来打算这么

我正在编写一个简单的登录系统。用户必须引入昵称,无需密码。如果已选择昵称,则通知用户soI used alert。如果昵称是免费的,用户会被告知是免费的。我正在服务器中使用express。以及服务器和客户端中的socket.io。 这东西或多或少起作用了

正如你所看到的,它是有效的。 但是如果我引入了一个无效的名称,表单就会被禁用。我的意思是,如果a想再次发送昵称,我必须重新加载页面。 以下是客户端的代码:


你可以在下面的答案中发布你是如何做到的,而不是在你的问题中添加[已解决]。我本来打算这么做的。
<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8" />
    <title>Demo</title>
    <style type="text/css">
        body {
            margin: 5%;
        }
    </style>
</head>
<body>

<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>

<script>

    var socket = io();

    var send_nickname =
    function()
    {

        socket.emit('msg', document.text_box.nickname.value);

        // check
        socket.on('login', function(msg){

            if(msg == 'ok')
            {
                //muy bien
                alert("You logged in as " + document.text_box.nickname.value);
            }
            else
            {
                alert("The nickname " + document.text_box.nickname.value + " is already chosen");
            }

        });

    };

</script>

<h1> Introduce your name </h1>

<form action="javascript:send_nickname()" name="text_box">
    nickname: <input type="text" name="nickname"><br>
    <input type="submit" value="Submit">
</form> 

</body>
</html>
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var playerToSocket = {};
var socketToPlayer = {};

app.get('/', function(req, res){
  res.sendfile('index.html');
});

app.get('/index.html', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){

  console.log('a user connected');

  var name = '';
  socket.on('msg', function(msg){

    // First of all, the client must choose a nick name
    if(name == ''){
        name = msg;

        if(playerToSocket[name] == null){

            // reserve the name
            playerToSocket[name] = socket;
            socketToPlayer[socket] = name;

            console.log("New player: " + name);

            // send on success
            socket.emit('login', 'ok');

        }
        else{

            console.log("The nickname is already chosen.");

            // send on fail
            socket.emit();
            socket.emit('login', 'fail');

        }

    }

  });

  socket.on('disconnect', function(){

    name = socketToPlayer[socket];
    console.log('user disconnected: ' + name);
    socketToPlayer[socket] = null;
    playerToSocket[name] = null;

  });

});

http.listen(5555, function(){
  console.log('listening on *:5555');
});