javascript - 如何创建购物车以在其中添加多个商品而不刷新页面
问题描述
我正在为一个 CS50 项目构建一个在线商店网站模型,但我目前在创建购物车时遇到了麻烦。
我可以构建一个非常简单的购物车模型,通过单击页面上所有“购买”按钮的按钮将用户重定向到某个 add_to_cart() 函数。
我想要实现的是在每次点击时不重定向到另一个页面。例如,我看到网上商店有很多商品,并且页面上有相应的“购买”按钮,点击按钮后,我只会看到购物车元素上的计数器增加,用户可以继续在页面上购物,然后只去完成后,转到购物车页面以完成购买。
我有一个模板代码块,我正在使用 atm 尝试解决所需的 Python,可能还有一些 JS 代码与之配套:
<form action="/catalog" method="post">
{% for item in goods %}
<li class="list-group-item list-item-no-leftpad">
<div class="item-info-description">
<p><a href="/item?id={{ item.item_id }}">{{ item.brand }} {{ item.model }}</a>
<p>{{ item.short_description }}
</div>
<div class="item-info-offers">
<p>Price: ${{ item.price }}
<p>In stock: {{ item.in_stock }}
<p><button type="submit" class="btn btn-primary" name="buy" value="{{ item.item_id }}">Buy</button>
</div>
</li>
{% endfor %}
</form>
解决方案
问题是每次用户尝试更新项目时,浏览器都会POST
向您的 Web 服务器(或应用程序)发出请求。这涉及POST
到表单数据和重新生成整个页面并向用户显示更新的内容。这是在处理<form action="/catalog" method="post">
您正在寻找的是客户端代码,用于根据用户的交互更新商店和更新信息。久经考验的方法是使用cookies(存储信息)和JavaScript(修改它)。存储购物车信息(或者更确切地说是组织它)的最简单方法是使用JSON(最后只是一个字符串)并将其存储在 cookie 中。
所以你需要做的是:
- 不要
POST
每次用户尝试更新购物车时。要做到这一点; - 在您的客户端代码中,为您显示的所有项目的按钮单击添加一个事件侦听器。
- 添加一个不同的按钮,即
POST
任何附加信息(Cookie 由浏览器自动发送) - 读取 cookie 服务器端并生成结帐页面(或基于您的业务逻辑的任何其他结果)
这里有一些参考资料可以帮助您入门。
更新:您可能想改用本地存储 API,以更好地遵守 GDPR。
推荐阅读
- c++ - 错误:“无法加载 DLL 函数!”
- azerothcore - 您如何更改服务器的时区以匹配本地?
- angular - 文本区域包含情感符号
- linux - “此平台不支持 SMP”
- tinymce - TinyMCE 边框样式 5.4.1:折叠与分离
- assembly - STM32。计时器不断计数过去的自动重载值?
- mongodb - 使用私钥( file.pem )和没有 mongo_url 的用户连接外部 mongodb
- javascript - Wamp,node JS和express之间的区别?
- python - 运行由 cpython 创建的 main.c 时找不到 Python.h
- python - 我可以在 pandas 聚合语句中添加未聚合的列吗?