Javascript 在文件夹中更改时刷新网页
每次文件上载到文件夹时,我都要刷新网页。 我在flask中编写了一个web服务,它具有以下处理程序Javascript 在文件夹中更改时刷新网页,javascript,jquery,python,web,flask,Javascript,Jquery,Python,Web,Flask,每次文件上载到文件夹时,我都要刷新网页。 我在flask中编写了一个web服务,它具有以下处理程序 @app.route('/getlatest/') def getlatest(): import os import glob newset = max(glob.iglob('static/*'),key=os.path.getctime) Return newest; 这将为我提供文件夹中最新文件的名称 我在JS(客户端)中有一个Ajax调用,以不断地从上述
@app.route('/getlatest/')
def getlatest():
import os
import glob
newset = max(glob.iglob('static/*'),key=os.path.getctime)
Return newest;
这将为我提供文件夹中最新文件的名称
我在JS(客户端)中有一个Ajax调用,以不断地从上述函数获取数据
function GetLatest()
{
$.ajax({
url: "http://localhost:5000/getlatest",
success: function(result)
{
if(previousName != result){
previousName = result;
$("#image").attr("src","/"+previousName);
}
}
});
}
函数每秒调用一次服务器
(function myLoop (i) {
setTimeout(function () {
GetLatest();
if (--i) myLoop(i);
}, 1000)
})(100);
这很好[几乎很好]。
我的问题是:有没有更好的方法[必须有]?
我对技术选择持开放态度,它们可能是什么[节点、角度等]是的,您可以使用WebSocket(flask socketio)。这将使您和服务器之间有一个开放的连接,并且每次文件夹中有一张新照片时,都会显示在选定的div上
http://flask-socketio.readthedocs.io/en/latest/
https://pypi.python.org/pypi/Flask-SocketIO/2.9.1
我就是这样做的 首先感谢 谢谢你完美的解释 读了几篇博客后我学到了什么 使用http协议启动的所有通信都是客户机-服务器通信,客户机始终是启动器。因此,在这种情况下,我们必须使用不同的协议:Web套接字,它允许您创建全双工(双向)连接 这是服务器代码
socketio = SocketIO(app, async_mode=async_mode)
thread = None
prevFileName = ""
def background_thread():
prevFileName = ""
while True:
socketio.sleep(0.5)
if(isNewImageFileAdded(prevFileName) == "true"):
prevFileName = getLatestFileName()
socketio.emit('my_response',
{'data': prevFileName, 'count': 0},
namespace='/test');
def getLatestFileName():
return max(glob.iglob('static/*'),key=os.path.getctime)
def isNewImageFileAdded(prevFileName):
latestFileName = max(glob.iglob('static/*'),key=os.path.getctime)
if(prevFileName == latestFileName):
return "false"
else:
return "true"
创建单独的线程以保持套接字打开。emit将消息从服务器发送到客户端
@socketio.on('connect', namespace='/test')
def test_connect():
global thread
if thread is None:
thread = socketio.start_background_task(target=background_thread)
emit('my_response', {'data': 'Connected', 'count': 0})
这里是客户端。[用以下代码替换了ajax调用]
var socket = io.connect(location.protocol + '//' + document.domain + ':' +
location.port + namespace);
socket.on('my_response', function(msg) {
setTimeout(function(){ $("#image").attr("src","/"+msg.data)},1000)
});
如果我错了,请更正。您要查找的是文件上载代码是否位于同一页面中?如果是这样,你可以在文件上传成功后处理刷新call@JefreeSujit不