【问题标题】:Updating Cart Basket - ajax or without ajax?更新购物车篮 - ajax 还是没有 ajax?
【发布时间】:2011-04-06 19:13:03
【问题描述】:

假设您有一个项目列表,然后单击“添加”按钮。商品名称将添加到购物篮中。

这样做的最佳做法是什么?

1) 当您点击添加按钮时,商品数据将通过 ajax 添加到购物车会话中,然后也通过 ajax 重新显示购物篮框。

2) 与数字 1 相同,但添加到数据库 cart_temp 表而不是购物车会话?

3) 如果没有 Ajax,当您单击“添加”按钮时,将通过 JavaScript 在篮框上创建新元素/标签。将添加项目名称和价格。在篮框的底部,会有一个“继续”按钮。单击继续按钮,然后将购物车元素/标签中的数据放入会话或数据库中。如何使用jquery获取元素item和prices值?

4) 或者你的解决方案是什么?

【问题讨论】:

  • 深思熟虑:最好同时支持 Ajax 方法,但也支持非 JavaScript 方法。您希望它为因安全(或其他)原因而禁用 Javascript 的人正确降级。
  • ^ 同意,如果这是您正在制作的某种形式的公共 Web 应用程序,我建议同时使用 Ajax/JavaScript 方法和 php 方法。

标签: php jquery shopping-cart


【解决方案1】:

对于与购物车管理相关的所有类型的问题,没有通用的解决方案。对每个人、任何地方都通用的解决方案。但是有经过测试且运行良好的设计模式。此外,我可以知道我的软件使用的是哪种型号。

首先你要知道,每次修改价格、折扣、促销代码都可以修改原产品价格。使用 JavaScript 计算它可能不太稳定和不可靠。 应该有一个/几个可信的方法来返回分配给购物车的信息,例如

class Cart {
  public function getTotalGrossPrice() { ... }
  public function getTotalNetPrice() { ... }
}

方法将返回可靠的值,例如加税什么的。其次,您需要使用 ajax 从 JavaScript 管理它。我更喜欢以 JSON 格式获取所有数据。

$.getJSON('/cart/getTotalGrossPrice.html');

看:http://api.jquery.com/jQuery.getJSON/

如果您有一种方法可以获取购物车总价,则可以很容易地在您的网站上随处获取它。当有一个像类这样的中心位置时,引入像促销代码这样的新功能将不那么痛苦。想象一下,您的网站上很少有地方是通过 JavaScript 计算价格的,在编辑时很容易出错。

http://yuml.me/8317d38

这种模型在结构类似于 API Schema 的网站上很常见。

也许它会帮助你,祝你好运。

【讨论】:

  • 感谢您的详细回复,这很有帮助。只是一个简单的问题.. 我不必使用 $_SESSION 来存储购物车数据。我可以简单地保存在购物车类中吗?
  • 您必须将购物车存储在 MySQL 等数据库中,例如类只是帮助您获取购物篮详细信息的抽象。 Ajax 请求应该调用 Class 抽象,它将向 DB 请求数据。将产品存储在 $_SESSION 中并不是一个好主意,因为它可以快速增长,并且在客户放弃会话时不会存储数据。
【解决方案2】:

我认为 AJAX 调用越少越好。我选择了第四个解决方案(#4)。基本上在项目单击时,您可以(通过 jQuery)添加一些 HTML 隐藏字段,例如:

<div id="item-list" style="display: none;">
    <div class="item" id="12345"></div>
    <div class="item" id="12346"></div>
    ...
</div>

然后在创建“继续”按钮后处理所有内容。 至少,我会这样做。

回答这个问题:

如何使用 jquery 获取元素项目和价格值?

您应该从您的价格字段中获取它并添加它以显示它的当前价格。但我会避免将价格存储在 HTML 页面或 Javascript 中:最好让您的 PHP 脚本计算发送产品列表的实际价格。

【讨论】:

  • @user622378,他们将存储选定的项目,以便在之后通过 AJAX 请求轻松发送它们。
【解决方案3】:

最好的办法是通过 AJAX 往返于服务器并发送回篮子的 HTML。 HTML 是如此之小,以至于 AJAX 开销无论如何都会花费更多时间,但您确实需要使用服务器端逻辑来获得正确的定价。

如果降级对于非 JavaScript 很重要,请刷新整个页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2017-01-20
    相关资源
    最近更新 更多