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()
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>
我在许多页面上寻找这个问题的答案,但没有一个起作用,直到我找到释放 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); }       
   })
最重要的行是成功行,它释放文档以便可以重新呈现它。
当您通过 AJAX 发送POST请求时,请求来自 javascript,来自 Flask 的响应数据将存储在 Javascript 对象中。浏览器本身不直接发送或接收任何内容,因此它不会重新渲染页面。
您需要在 Flask 应用程序中定义另一个端点来为 POST 请求返回 json 数据,并使用 AJAX 使用返回的 json 数据来操作 DOM。