我已经成功设置了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'))
任何有关如何跟踪问题的建议将不胜感激。