如何使用网络套接字访问发送到Flask的表单数据?我在Google Chrome开发者工具 - >控制台中收到了无效的帧头。
从我的javascript代码中提取:
var form_data = new FormData($('#my_form')[0]);
socket.emit( 'handle_form',{数据:form_data});
我如何从烧瓶中访问my_form中的'title'字段?
request.form抛出相同的错误“无效的帧头”
还有一个问题,使用网络套接字进行表单提交以及作为ajax的完整替代是否合适?
答案 0 :(得分:2)
您应该构建一个普通字典并发送它,而不是发送FormData
对象,这是一个客户端唯一的构造,因为在Socket.IO中来回传输的所有数据都被序列化为JSON。
然后在服务器上,你将有一个dict作为参数发送到你的套接字回调函数。有关如何将表单数据发送到服务器的建议,请参阅此example。
答案 1 :(得分:0)
与Flask-SocketIO
不同。
当你socket.emit
某事时,你可以通过回调处理它。
@socketio.on('handle_form')
def handle_form_callback(data):
print('received message: ' + data)
在这种情况下,您没有request.form
。
它可以作为表单提交的替代品,但我不认为它是一个很好的替代品。 Websockets不是无状态的,它们难以扩展并且基本上绑定到服务器。当然它有一些解决方法,但它不像记录良好的HTTP服务器扩展。