Ajax Request实际上在Flask中采用了预渲染的值

时间:2019-03-21 20:44:09

标签: jquery ajax python-3.x flask jinja2

我已经成功设置了Ajax调用,但是我的索引值实际上只是从Flask服务器上的Jinja2模板文字字符串中获取的。

所以我从POST请求中获得的值是一个字典:

ImmutablebleMultiDict([('cart[0][name]', 'Product 1'), ('cart[0][price]', '1.99'), ('cart[0][currency]', 'USD')

代替:

ImmutablebleMultiDict([('name', 'Product 1'), ('price', '1.99'), ('currency', 'USD')

这是我的HTML代码段:

<ul>
        {% for product in products %}
            <li data-id="{{product['_id']}}">{{ product["name"] }} - {{ product["currency"]}} {{ product["price"] }}
                <ul>
                    <li>{{ product["description"] }}</li>
                    <li>
                        <button class="productBtn" type="button"
                                data-product='{
                                "name": "{{ product["name"] }}",
                                "price": "{{ product["price"] }}",
                                "currency": "{{ product["currency"] }}"
                                }'
                                value="{{product['name']}}">Add Cart</button>
                    </li>
                </ul>
            </li>
        {% endfor %}
        <button id="checkout" name="checkout">Checkout</button>
    </ul>

JavaScript Ajax调用:

$(document).on('click', '#confirmBtn', function(e) {
    console.log(cart);
    $.ajax({
        url: '/checkout',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: "json"
        // cart = [{"name": "Value1"}, {"name": "Value2"}]
        data: JSON.stringify({cart})
    }).done(function() {
        console.log("Data been sent!");
    });
});

还有我的后端Flask / Python

@app.route('/checkout', methods=['POST'])
def checkout():
    if request.method == 'POST':
        data = request.form
        # ImmutablebleMultiDict([('cart[0][name]', 'Product 1'), ('cart[0][price]', '1.99'), ('cart[0][currency]', 'USD')
        print(data)
        return redirect(url_for('shop'))

任何有关如何跟踪问题的建议将不胜感激。

0 个答案:

没有答案