做一个AJAX帖子,然后用Flas获取

2024-03-29 10:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是让用户填写表单,在POST请求中将该信息发送到flask服务器,然后使用该表单信息呈现模板(在服务器上经过某些逻辑之后)。

到目前为止,我已经完成了这一切的邮政部分。我现在正试图在if request.method == POST'中呈现一个模板,我想这现在不起作用。

这是我目前掌握的代码:

@app.route('/filteredsearch/', methods = ["GET", "POST"])
def filteredsearch():
    if request.method == 'POST':
        data = json.loads(request.data)
        tables = data['checkboxes']
        filter_results = getFilteredEntities(tables = tables)
        print filter_results                          #This works
        return render_template("filteredsearch.html", entities = filter_results)

我是否必须对我的POST函数的成功执行单独的GET请求?如果是,我该怎么做?

以下是AJAX请求(如果重要,可以在应用程序的每个页面上调用此代码):

$.ajax({
              url:"/filteredsearch/",
              type: 'POST',
              data: json,
              contentType: 'application/json;charset=UTF-8',
              success: function() {
                           alert("Done");
                       }
          });

所以,理想情况下,我可以呈现一个模板,而我张贴。如果不是这样,我应该如何处理来自同一个ajax函数的GET请求?

我知道通常您使用url_for()来处理一个GET请求,这是一个选项吗,因为我现在在JS中?


Tags: 服务器模板信息json表单tablesdataget
2条回答

我知道有点晚了,但我和你有同样的问题。

我需要用Ajax发布一篇文章,如果成功的话,我需要向flask发出GET请求以返回一个呈现的模板。类似于:

烧瓶部分:

@app.route('/something', methods=['POST'])
def something_post():
    # Get JSON object passed with Ajax request
    elems = request.json
    # Do stuff
    # If everithing is OK, return success message
    return json.dumps({'success': True}), 200, {'ContentType': 'application/json'}

@app.route('/something', methods=['GET'])
def something_get():
    # Return template
    return render_template('something.html')

AJAX部分:

$.ajax({
        type: 'POST',
        data: myJsonString, // JASON object passed to flask
        url: '/something',
        contentType: "application/json",
        method: 'POST',
        success: function(response) {
            # If we succed we make a request to get the template
            window.location.href = "/something";
            # With this line we are making a simple GET request to Flask and the template returned is opened in the current window
        }
});

请注意,我离成为Ajax专家还很远很远。我不知道这样做是否正确,但这是我找到的最简单的方法。

通常使用ajax请求返回数据,然后动态显示在页面中。

$.ajax({
    url:"/filteredsearch/",
        type: 'POST',
        data: json,
        contentType: 'application/json;charset=UTF-8',
        success: function(evt) {
            $("#results").html = evt.data;
        }
}); 

如果您要重定向到另一个模板,那么为什么不直接单击一个表单上的submit,该表单生成一个POST,然后用新模板进行响应。如果在ajax请求返回后(这将比仅显示已收到的信息慢),您实际上想重定向到一个全新的页面,那么您可以更改window.location。像window.location = 'http://www.example.com'这样的东西会把用户带到example.com。

相关问题 更多 >