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

到目前为止,我已经完成了所有这一切的POST部分。我正在尝试在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)

我必须在GET函数成功执行时单独执行POST请求吗?如果是这样,我该怎么办?

这是AJAX请求(如果需要,可以在应用程序的每个页面上调用此代码):
$.ajax({
              url:"/filteredsearch/",
              type: 'POST',
              data: json,
              contentType: 'application/json;charset=UTF-8',
              success: function() {
                           alert("Done");
                       }
          });

因此,理想情况下,我可以在发布时渲染模板。如果不是这种情况,我该如何从相同的ajax函数发出GET请求?

我知道通常您将url_for()用于GET请求,考虑到我目前在JS中,这是否是一个选项?

最佳答案

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

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

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

关于jquery - 使用Flask执行AJAX POST,然后执行GET,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20204297/

10-14 19:22
查看更多