Flask render_template 不适用于 AJAX post

use*_*044 5 javascript python ajax jquery flask

我有一个网站,可以将 AJAX 发布到 Flask 路由。

我知道有很多类似的问题(请不要标记为重复)使用 AJAX success 方法来处理响应。这在我的简化示例中是可行的,但我的实际代码中的路线是从数据库中提取一堆数据,然后将其呈现到多个表中。我不想用 JavaScript 重写所有表数据更新,所以我真的只需要重新渲染模板。

Python:

from flask import Flask, render_template, request
app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def hello_world(message=None):
    return render_template('test.html', message=message)


app.run()
Run Code Online (Sandbox Code Playgroud)

html

<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

    <script>
        $(document).ready(function () {
            $('#mybutton').click(function () {

                $.post(window.location.href, {'test': 'test'});

            });
        });

    </script>
</head>
<body>
{{ message }}
<button id="mybutton" name="mybutton" type="button">Click Me!</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Eam*_*nny 5

我在许多页面上寻找这个问题的答案,但没有一个起作用,直到我找到释放 AJAX 调用以便允许重新渲染的页面:

$('form').on('submit', function(event) {
   $.ajax({
      type: 'POST',
      url:  "{{ url_for( 'myServerFunction' ) }}",
      data: JSON.stringify({'myId':bunchOfIds}),
      contentType: "application/json",
      success:function(response){ document.write(response); }       
   })
Run Code Online (Sandbox Code Playgroud)

最重要的行是成功行,它释放文档以便可以重新呈现它。


dvn*_*yen 4

当您通过 AJAX 发送POST请求时,请求来自 javascript,来自 Flask 的响应数据将存储在 Javascript 对象中。浏览器本身不直接发送或接收任何内容,因此它不会重新渲染页面。

您需要在 Flask 应用程序中定义另一个端点来为 POST 请求返回 json 数据,并使用 AJAX 使用返回的 json 数据来操作 DOM。