javascript - 无法使用 Flask-socketio 和 Javascript 广播消息
问题描述
我正在尝试使用 Flask 和 socket-io 构建一个简单的聊天室应用程序。当用户键入消息并单击提交按钮时,应将消息广播给所有用户。但在我的情况下,单击提交按钮后,页面刷新并且什么都没有出现。请帮忙。
我尝试在 firefox 浏览器控制台中运行 Javascript 代码,它在那里运行良好(没有表单)。但是当我从网页提交表单时,问题就出现了。
这是一些代码片段:
蟒蛇后端:
@socketio.on('send messages')
def vote(data):
messages = data['messages']
emit('announce messages', {"messages":messages}, broadcast=True)
javascript:
document.addEventListener('DOMContentLoaded', () => {
// Connect to websocket
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
// When connected, configure buttons
socket.on('connect', () => {
document.querySelector('#form').onsubmit = () => {
const messages = document.querySelector('#messages').value;
socket.emit('send messages', {'messages': messages});
}
});
socket.on('announce messages', data => {
const li = document.createElement('li');
li.innerHTML = `${data.messages}`;
document.querySelector('#push').append(li);
});
});
HTML 表单
<ul id="push">
<!--filled by socket.io-->
</ul>
<form id="form">
<label for="messages">Message:</label>
<input id="messages" type="text" name="messages">
<input type="submit" value="Submit">
</form>
解决方案
当您提交表单时,您必须通过返回 False 来阻止它实际提交,这样连接就不会中断。在您的情况下,页面正在刷新,因此您无法看到结果。
socket.on('connect', () => {
document.querySelector('#form').onsubmit = () => {
const messages = document.querySelector('#messages').value;
socket.emit('send messages', {'messages': messages});
return False
}
});
也许这会起作用。
推荐阅读
- cleverhans - 使用 Cleverhans 在 Keras 中实现 FGSM 时出错
- android - Facebook Audience Network 质量检查总是失败
- wordpress - 警告:mysqli_escape_string() 只需要 2 个参数
- django-oscar - RuntimeError:在应用程序“目录”中冲突“product_product_options”模型:在 Oscar 2
- javascript - 如何在 Express [MEAN] 中发送标头
- django - 模拟 Django 用户的最佳方法是什么?
- c++11 - 将 shared_ptr 作为参数传递给线程函数,会导致错误
- docker - Flask 代码单独运行,但使用 docker 容器化时,页面无法访问
- iphone - 自 IOS 13 更新以来在 Visual Studio Code 中调试 Flutter 不起作用
- java - RestTemplate 获取对象列表 - 为什么使用 ParameterizedTypeReference 而不是对象数组?