繁体   English   中英

socket IO 将表单数据从客户端发送到服务器

[英]socket IO send form data from client to server

我正在尝试使用 socket.io 从表单向我的服务器发送一条简单的消息。 遗憾的是,这失败了,我知道客户端与服务器有连接,但它似乎没有收到消息。

有人可以向我解释为什么我的代码失败了吗?

服务器.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

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

io.on('connection', function(socket){
  console.log('connection is er');
  socket.on('message', function(msg){
    console.log('test');
    console.log('message: ' + msg);
  });
});

索引.html:

<html>
   <body>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      var socket = io();
      $('#form').submit(function(){
        socket.emit('message', $('#Input').val());
        //socket.emit('message', "Input");
        //$('#Input').val('');
        return false;
      });
    </script>
    <form id = "form" action = "">
      Input: <input type="text" id="Input"><br>
      <input type="submit" value="Submit">
    </form>
   </body>
</html>

谢谢康纳 D

那绝对是解决方案。

对于那些有同样问题的人,您可以在 Chrome 上使用 F12 然后在控制台上检查 javascript 错误。 如果它说:

未捕获的 ReferenceError: $ 未定义

你可能会错过这个导入:

script src="http://code.jquery.com/jquery-1.11.1.js"></script>

尝试包装此代码

$('#form').submit(function(){
    socket.emit('message', $('#Input').val());
    //socket.emit('message', "Input");
    //$('#Input').val('');
    return false;
  });

$(document).ready(function(){/*code here*/});

看起来您的客户端正在使用 socket.io 网站上的 socket.io JS 文件,但您没有指定服务器的主机和端口。

查看文档http://socket.io/docs/#using-with-the-express-framework你需要做类似的事情

var socket = io.connect('http://localhost:8001');

form 的默认动作是刷新页面。 所以,

form.addEventListener("submit",(e)=>{
    e.preventDefault();
    //Rest of the code
});

这将阻止表单的默认操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM