У меня есть интернет-магазин, который использует локальное хранилище, чтобы отслеживать, какие продукты находятся в корзине (хранятся как cart = [{"id":"1"},{"id":"2"},{"id":"4"}]
). Когда пользователь переходит к корзине. html, я хочу отправить cart
в свой бэкэнд, сгенерировать полный список продуктов, а затем использовать этот список в вызове return render_template
.
Бэкэнд получает cart
очень хорошо и может генерировать список без проблем, но я не могу получить список в корзину. html страница (похоже, что cart
пусто). Разве запрос POST не должен быть в корзине. html, а вместо этого решать его с помощью перенаправлений? Если да, то как мне это сделать? Я бы хотел, чтобы на корзине не было кнопки «загрузить корзину». html, если возможно.
Это начало корзины. html (я пытался установить ajax вызов asyn c: false, но это не остановило отображение страницы без cart
:
{% extends "layout.html" %}
{% block content %}
<script type="text/javascript">
function sendCart() {
$(document).ready(function() {
$.ajax({
url: "{{ url_for('cart', _external=True) }}",
type: 'POST',
data: JSON.stringify(JSON.parse(localStorage.getItem("cart"))),
contentType: "application/json; charset=utf-8",
dataType: "json",
});
})
}
sendCart();
</script>
...
А вот мой маршрут:
@app.route('/cart', methods=['GET', 'POST'])
@login_required
def cart():
cart = []
if request.method == 'POST':
for i in request.json:
cart.append(get_Furniture(int(i['id'])))
return render_template("cart.html", cart_objects = cart)
return render_template("cart.html", cart_objects = cart)
Редактировать: Решено
Мне было проще пропустить, используя ajax и localalstorage, вместо этого используя повар ie, который легко доступен в бэкэнде: без необходимости запроса я могу сгенерировать cart
перед рендерингом страницы.