Flask:在jQuery ajax $ .post调用之后呈现页面

Mar*_*sse 7 ajax jquery flask

我将带有jQuery $ .post()的表单中的数据发送到flask函数.该函数对数据进行了一些长时间的运算.在这种情况下,我不想发回一些HTML,而是渲染一个新模板.当我用jQuery/AJAX调用函数时,我该怎么做?

表格:

<form id='myform'>
    <input type='text'> some input...
    <input type='button' value='send form' id='mybutton'>
</form>
Run Code Online (Sandbox Code Playgroud)

表单输入的计算需要一些时间,所以我用jQuery发送它:

$.("#mybutton").click(function() {
    // get the data in form
    $exampledata = 'foo'
    $.post("/some/flask/function", {'data': $exampledata}, function(response) {
      can I render a new template here with data from flask function?
    });
});
Run Code Online (Sandbox Code Playgroud)

在flask中,相应的函数如下所示:

@app.route('/some/flask/function', methods=['POST'])
def longCalculation():        
    form = request.form
    data = form['data']

    result = runTheLongCalculation(data)
    this does not work -->
    return render_template('result.html',r=result)
    how can I render a new template after an jQuery/AJAX call?
Run Code Online (Sandbox Code Playgroud)

我不想发回重定向URL和JSON,但实际上是渲染模板.

Chr*_* P. 4

如果您渲染的模板只是一段 HTML,您可以像 Flask 代码中所示那样返回它,并在浏览器中执行以下操作:

$.("#mybutton").click(function() {
    // get the data in form
    $exampledata = 'foo'
    $.post("/some/flask/function", {'data': $exampledata}, function(response) {
        var myDiv = $('#resultarea'); // The place where you want to inser the template
        myDiv.html(response);
    });
});
Run Code Online (Sandbox Code Playgroud)

这期望你的 Flask 模板看起来像这样:

<div id='result'>
    {{ result }}
</div>
Run Code Online (Sandbox Code Playgroud)

它可以更大,但我们将其插入页面内,因此没有侧边栏、菜单导航或 html/body 标记,只是一段简单的 HTML。

如果您使用 Flask 函数发回一个完全成熟的 HTML 页面,就会出现问题,因为它将无法在现有页面中正确呈现。

  • 更一般地说,您可以让它计算/生成数据,将其保存在本地(服务器端,保存到某些临时存储,如 memcached 或 redis,甚至保存到磁盘),然后使用特定参数(ID 或类似的参数)重定向到另一个页面。计算),然后将结果显示为普通网页。然而,通过 AJAX 调用发送大量数据并没有什么问题 - 就所有意图和目的而言,它的工作方式与“正常”HTTP 请求相同。 (2认同)