2 回答

TA贡献1828条经验 获得超4个赞
“对一个请求的一个响应”与HTTP协议的工作方式有关:客户端发送查询和一些数据(POST请求),而服务器以其他一些数据进行响应(您的“一个响应”)。从技术上讲,您可以使服务器以块的形式发送回一些响应,但这在实践中却不是这样。首先,浏览器不能很好地处理这一问题。
您需要以其他方式执行此操作。例如,如注释者所建议的那样,使用SocketIO创建一个“边通道”。然后,您可以通过此副渠道将更新发送给客户端-print
您可以使用而不是s socketio.emit
。
在客户端,您将在页面加载时首先订阅SocketIO通道。然后,您将通过AJAX调用(或在单独的iframe中)提交文件,并使SocketIO连接在页面上保持打开状态以显示更新。
这样,POST请求与您的“页面加载”是分开的。页面上的javascript保持活动状态,可以读取和显示进度更新,并且上传(带有相关的等待时间)在后台进行。

TA贡献1829条经验 获得超9个赞
我也可以像@matejcik在他们的答案中解释的那样来做,但是还有另一种方法。websockets所做的是pushing
在更新后将数据返回给浏览器。还有pull
方法。
您可以定期向服务器发送查询,服务器将为您提供更新。您仍然必须使用AJAX
发送请求和javascript的setTimeout
功能在查询之间等待,但是您要做的基本上是刷新页面而不向用户显示。对于初学者来说更容易理解,因为所使用的技术仍然是静止的GET
。无需打印新日志,而是将其添加到字符串(或数组)中,并且在发出GET请求时,您将返回此数组,清除文本输出并使用新旧信息写入此新数组。
这种方法远不如websockets有效,但是对于原型制作来说它可以更快。
添加回答
举报