【问题标题】:NodeJS - socket.on doesn't appear to be calledNodeJS - socket.on 似乎没有被调用
【发布时间】:2019-02-16 16:05:13
【问题描述】:

我正在使用 Node.JS POST 方法将表单提交到我的服务器。它被很好地传输到服务器;在这个阶段没有出现任何问题。但是,当我使用 io.emit 和 socket.io 将数据传输回客户端时,客户端似乎没有发生任何事情。控制台上没有打印任何内容,并且我在那里或在命令提示符(我正在从中运行服务器)中没有收到任何错误。

index.html:

<form id="schoolCreateForm" action="http://localhost:3000/createSchool" method="POST">
    School name: <input name="schoolName" type="text"><br><br>
    Private?: <input name="schoolPrivate" type="checkbox"><br><br>
    Entry password: <input name="entryPassword" type="password"><br><br>
    <button type="submit">Submit</button>
</form>

<script>
    var socket = io();
    socket.on('updateSchool', function(response) {
        console.log(response);
        document.getElementById("headerSchoolName").innerHTML = data.schoolName;
    });
</script>

app.js:

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

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.post('/createSchool', function(req, res) {
    response = {
        school_name: req.body.schoolName,
        school_private: req.body.schoolPrivate,
        entry_password: req.body.entryPassword
    };
    console.log(response);

    res.sendFile(__dirname + '/client/index.html');

    io.emit('updateSchool', response);
});

serv.listen(3000);
console.log("Server started on localhost://3000");

有人知道怎么回事吗?

【问题讨论】:

    标签: javascript html node.js express socket.io


    【解决方案1】:
    <form  action="http://localhost:3000/createSchool" method="POST">
    School name: <input name="schoolName" type="text"><br><br>
    Private?: <input name="schoolPrivate" type="checkbox"><br><br>
    Entry password: <input name="entryPassword" type="password"><br><br>
    <button type="submit" id="schoolCreateForm">Submit</button>
    

    提交表单数据后,它将重新加载您的页面,这意味着套接字连接将结束。如果您想查看带有套接字的响应,请在不重新加载页面的情况下发出 ajax.post 请求。

    <form id="schoolCreateForm">
    School name: <input name="schoolName" type="text"><br><br>
    Private?: <input name="schoolPrivate" type="checkbox"><br><br>
    Entry password: <input name="entryPassword" type="password"><br><br>
    <button type="submit">Submit</button>
    </form>
    
    <script>
       document.querySelector('#schoolCreateForm').addEventListener('click', 
       function(e) {
         e.proventDefault() // this line will not all to reload page after 
                           /// submitting the 
                           //form data
     ### writh you ajax request functionality here 
    
      })
    var socket = io();
    socket.on('updateSchool', function(response) {
        console.log(response);
        document.getElementById("headerSchoolName").innerHTML = data.schoolName;
    });
    

    【讨论】:

    • 不幸的是,e.preventDefault 现在阻止我按下提交按钮或复选框。有什么修复吗?
    • 嗯。我认为您应该为表单按钮提供表单 ID。它将允许您单击按钮
    • 但是现在当我按下提交时,什么也没有发生。甚至可以将socket.io用于这种类型的事情吗?
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2018-07-05
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多