socket IO 从客户端向服务器发送表单数据
socket IO send form data from client to server
我正在尝试使用 socket.io 从表单向我的服务器发送一条简单消息。可悲的是,这是失败的,我知道客户端与服务器有连接,但它似乎没有收到消息。
有人可以向我解释为什么我的代码会失败吗?
Server.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);
});
});
index.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>
看起来您的客户端正在使用来自 socket.io 网站的 socket.io JS 文件,但您没有指定服务器的主机和端口。
查看文档http://socket.io/docs/#using-with-the-express-framework你需要做一些类似
的事情
var socket = io.connect('http://localhost:8001');
尝试包装此代码
$('#form').submit(function(){
socket.emit('message', $('#Input').val());
//socket.emit('message', "Input");
//$('#Input').val('');
return false;
});
在$(document).ready(function(){/*code here*/});
谢谢康纳 D
这绝对是解决方案。
对于遇到相同问题的人,您可以在 Chrome 上使用 F12 然后在控制台上检查 javascript 错误。
如果它说:
Uncaught ReferenceError: $ is not defined
您可能错过了这个导入:
script src="http://code.jquery.com/jquery-1.11.1.js"></script>
表单的默认动作是刷新页面。
所以,
form.addEventListener("submit",(e)=>{
e.preventDefault();
//Rest of the code
});
这将阻止表单的默认操作
我正在尝试使用 socket.io 从表单向我的服务器发送一条简单消息。可悲的是,这是失败的,我知道客户端与服务器有连接,但它似乎没有收到消息。
有人可以向我解释为什么我的代码会失败吗?
Server.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);
});
});
index.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>
看起来您的客户端正在使用来自 socket.io 网站的 socket.io JS 文件,但您没有指定服务器的主机和端口。
查看文档http://socket.io/docs/#using-with-the-express-framework你需要做一些类似
的事情var socket = io.connect('http://localhost:8001');
尝试包装此代码
$('#form').submit(function(){
socket.emit('message', $('#Input').val());
//socket.emit('message', "Input");
//$('#Input').val('');
return false;
});
在$(document).ready(function(){/*code here*/});
谢谢康纳 D
这绝对是解决方案。
对于遇到相同问题的人,您可以在 Chrome 上使用 F12 然后在控制台上检查 javascript 错误。 如果它说:
Uncaught ReferenceError: $ is not defined
您可能错过了这个导入:
script src="http://code.jquery.com/jquery-1.11.1.js"></script>
表单的默认动作是刷新页面。 所以,
form.addEventListener("submit",(e)=>{
e.preventDefault();
//Rest of the code
});
这将阻止表单的默认操作