中间地块准备好后立即更新网站

时间:2019-04-16 20:42:57

标签: ajax flask streaming

根据网站上的选择,将在运行Flask的服务器上生成图。

我遇到的问题是产生例如10个不同的地块可能需要30秒钟。我想实现的目标是在第一个地块准备好后立即开始更新网站,然后在其他地块准备好后自动加载。

当前,只要用户点击网站上的“处理”按钮,就会执行以下AJAX功能:

    $.ajax({
        type: "POST",
        url: "/single",
        data: { athleteName1: $('#athleteName1').val(), style: $('#style').val()},
        success: function (results) {
            $('#results').empty().append(results);
            $('#results').show();
            $('#submitbutton').prop('disabled', false);
        },
        error: function (error) {
            console.log(error);
        }
    });

在服务器站点上,将创建图并将其嵌入div容器中。随后将它们串联起来,并立即以“ diagStr”的形式返回到网站:

@app.route('/single', methods=['POST', 'GET'])
def single():
    loop 10 times:
        diagStr += generate_plot()
    return Markup(diagStr)

使用“流内容”进行操作只是解决方案的一部分,因为AJAX等待直到收到整个响应。

任何想法都可以通过当今的技术解决吗?

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式来实现此目标,但是有一些简单的示例:

  • 在客户端进行循环,并生成10个单独的Ajax请求,并在收到每个响应时更新网页。
  • 如果您不预先知道客户端将有多少个循环,则使用单个请求,并让服务器在第一个循环完成后立即发送响应,并带有一个标志,指示是否是否存在更多循环-如果存在更多循环,客户端可以查看此标志并创建一个新的Ajax请求。