8

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

表格:

<form id='myform'>
    <input type='text'> some input...
    <input type='button' value='send form' id='mybutton'>
</form>

表单输入的计算需要一些时间,所以我用 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?
    });
});

在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?

我不想发回重定向 URL 和 JSON,但实际上呈现了一个模板。

4

2 回答 2

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);
    });
});

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

<div id='result'>
    {{ result }}
</div>

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

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

于 2013-06-18T14:37:11.300 回答
1

在尝试了很多方法之后:

我认为将数据从长期运行的服务器端计算发送到新页面的最佳方法是使用某种服务器端存储。这样,即使浏览器关闭或用户离开网站,一切正常。

我选择 redis,因为它非常简单快捷。

于 2013-06-18T19:56:55.593 回答