在服务器上运行长进程时在页面上显示动画

时间:2015-06-11 17:16:16

标签: javascript python flask

我想在我的页面上实现一个动画,当一个漫长的过程(如下面的Python Flask路线)正在运行时,它会在完成后消失。我怎么能这样做?

@app.route('/test', methods=['GET','POST'])
def test():
    if request.method=="POST":
        if request.form.get('updatepaths')=='Update' and form.validate_on_submit():
            Fname = form.name.data
            Lname=form.name2.data
            TimeConsumingFunction(Fname)
            TimeConsumingFunction(Lname)

1 个答案:

答案 0 :(得分:5)

您需要使用JavaScript来发出请求,显示微调器,然后在请求完成后删除微调器。例如,使用jQuery,这个例子显示" waiting" (或者你在那里放置的任何动画)处理请求时。

<a href="{{ url_for('test') }}" id="run">Run</a>
<span id="wait">Waiting</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
    var run_link = $('a#run');
    var run_wait = $('span#wait');
    run_wait.hide();

    $('a#run').click(function(event) {
        event.preventDefault();

        run_link.hide()
        run_wait.show();

        $.post($(this).attr('href'), function(data) {
            run_wait.hide()
            run_link.show();
        });
    });
</script>

您还可以使用Celery等任务队列在后台运行任务,而不是等待请求完成。这很有用,因为任务可以继续运行的时间超过请求的超时时间。