flask render_template对AJAX帖子不起作用

时间:2017-12-28 22:17:44

标签: javascript jquery python ajax flask

我有一个网站,可以向Flask路线发布AJAX帖子。

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

蟒:

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>

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

我在很多页面上都找到了这个问题的答案,但是在找到释放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); }       
   })

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

答案 2 :(得分:1)

好的,为什么你不发送“是”或“不是”#39;来自烧瓶应用的旗帜。由于您希望在没有页面刷新的情况下显示成功或失败消息,因此当您的烧瓶应用程序返回结果时,获取jquery来更新DOM。就像是 烧瓶应用程序中的return message可能会带来诡计 success: function(e)({ $('body').append(e);});。由于手机上的字长限制,无法生成更多代码,但调整代码可以完成工作。干杯!