【问题标题】:Python Flask SocketIO basic app doesn't work - Failed to read the 'responseText' property from 'XMLHttpRequest'Python Flask SocketIO 基本应用程序不起作用 - 无法从“XMLHttpRequest”读取“responseText”属性
【发布时间】:2020-11-14 21:42:06
【问题描述】:

我有非常基本的 Flask + SocketIO 应用程序,但是当我尝试从客户端发出时,它没有被接收到。我的代码:

from flask import Flask
from flask_socketio import SocketIO

#Flask setup
app = Flask(__name__)
socketio = SocketIO(app)

@app.route('/')
...

@socketio.on('test')
def test():
    print('received')

@socketio.on('connect')
def connect():
    print('connected!')

def start_flask():
    socketio.run(app, host='127.0.0.1', port=12345, debug=True)

if __name__ == '__main__':
    start_flask()

JS:

var socket = io('http://localhost:36958');

socket.on('connect', function () {
    console.log('connect');
});

function test() {
   console.log('test')
   socket.emit('test');
}
  1. 当我刷新时 - 我从 Python 获得“连接”,但不是从客户端/JS 控制台获得。 我只是在那里得到这个错误:
polling-xhr.js:315 Uncaught DOMException: Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'arraybuffer').
    at n.value (https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.1/socket.io.min.js:6:49490)
    at XMLHttpRequest.hasXDR.e.onreadystatechange (https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.1/socket.io.min.js:6:48706)
  1. 当我尝试调用 test() 函数时 - 它在 JS 控制台中显示“测试”,但在 Python 中没有“收到”。

谢谢。

【问题讨论】:

    标签: javascript python flask socket.io


    【解决方案1】:

    通过降级到 SocketIO 2 解决

    【讨论】:

    • 是的,我也确认一下,python socket.io 适用于旧版本的客户端 socket.io
    【解决方案2】:

    当您从不同端口的烧瓶中使用 API 时,您需要导入 CORS 来处理安全问题,因此请按照步骤安装 flask_cors 库:

    pip3 install Flask-Cors
    

    然后在你的代码中:

    from flask_cors import CORS
    app = Flask(__name__)
    socketio = SocketIO(app)
    CORS(app)
    

    【讨论】:

      猜你喜欢
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2017-06-26
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多