我在哪里放置我的重定向或return_template

时间:2014-05-22 20:51:36

标签: python post flask

在我的烧瓶应用程序中,您从一个页面开始,在该页面上单击几个按钮来计算项目名称,价格和数量。在下面的JS中,我使用该数据向网络服务器发出帖子请求:

$(document).on('click',".order_submit", function() {

     prodJSON = JSON.stringify(prodData)
     console.log(prodJSON)

        $.ajax({
            url: "/load_ajax",
            type: 'POST',
            data: prodJSON,
            contentType: 'application/json;charset=UTF-8'
        });

});

我想从下面的烧瓶代码中找到的是从home.html开始,然后当您提交订单时,您将被带到thankyou.html页面。我知道POST请求在load_ajax函数中有效,但由于某些原因,在订单提交时,页面不会更改。在订单提交后如何让它重定向?

@app.route('/', methods = ['GET','POST'])
def pos_page():
        return render_template('home.html')

@app.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
    if request.method == "POST":
        data = request.get_json()
        print list(data)
        return render_template('thankyou.html')

1 个答案:

答案 0 :(得分:1)

您无法从AJAX响应中重定向浏览器页面;你必须在你的AJAX处理程序中处理这个问题,明确地说:

$(document).on('click',".order_submit", function() {

    prodJSON = JSON.stringify(prodData)
    console.log(prodJSON)

    $.ajax({
        url: "/load_ajax",
        type: 'POST',
        data: prodJSON,
        contentType: 'application/json;charset=UTF-8',
        dataType: 'JSON',
        success: function(data) {
            document.location = data['location'];
        }
    });
});

这需要一个带有location密钥的JSON响应;然后,您可以告诉AJAX处理程序重定向(使用flask.jsonify()生成响应):

from flask import jsonify


@app.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
    if request.method == "POST":
        data = request.get_json()
        print list(data)
        return jsonify(location=url_for('thankyou'))

@app.route('/thankyou')
def thankyou():
    return render_template('thankyou.html')

因此load_ajax()告诉处理程序重定向的位置,thankyou.html页面由单独的路径提供。