2

我正在尝试将此功能添加到我的 PHP 购物车

假设我们有两个页面:catalog.php 和 cart.php

我想做的是:

用户单击 catalog.php 上的“添加到购物车”按钮,并通过 jQuery 向 cart.php 触发 ajax 请求,向它发送有关添加了哪些产品的信息(这一切都按预期工作),并通过包含使 cart.php 页面自行更新刚刚添加的产品没有页面刷新(这是我无法工作的部分)。

如果我将两个页面并排放置并单击“添加到购物车”,则没有任何反应,只有在页面刷新 (cart.php) 时,我才看到添加了新产品。

有没有办法归档这个?

编辑:我不够清楚我很抱歉我的错页面以标准方式呈现,没有框架没有弹出窗口“应用程序”按预期工作,这对用户来说不太可能成为问题“并排“事情只是因为我想知道一种获得此功能的方法,因为我可以看到自己在未来将它用于几乎任何事情(从 pageA、CSS 等对 pageB 进行 DOM 操作)

4

2 回答 2

0

最后我检查了一下,只有用window.open(或用<a target="_blank">链接打开)打开的页面才能相互交谈。

所以在 catalog.php 调用cart = window.open('cart.php')中,cart包含打开它的页面的窗口对象,所以你可以这样做:

cart.document.getElementById('whatever').innerHTML = '<p> new content</p>';

要让窗口在不打开另一个窗口的情况下并排交谈,您可以使用 HTML5 本地存储,但这需要一些更高级的魔法。

于 2013-04-13T00:21:55.100 回答
0

可以通过 AJAX 调用来模拟这一点,在该调用上Cart.php检查 (session/db) 以查看是否添加了新内容。

我建议像...

  • Cart.php 每 10-60 秒进行一次 AJAX 调用,并要求提供购物车中产品的完整列表。
  • 任何新项目都会酌情添加到表中(通过检查产品 Id 或 OrderItem Id)。您还应该更新数量/等。

这样,无论使用什么机制添加商品,购物车很快就会看到它们。

显然,您轮询的次数越多,购物车的更新速度就越快,但您对系统的负载也就越多。

现在不能直接实现的原因是 AJAX 请求总是由客户端而不是服务器发起。

还有另一种潜在的解决方法,它省略了频繁的轮询并提供近乎即时的更新,但实现起来有点复杂。

它被称为长轮询(见这个答案),实际上发生的事情是......

  • 客户端向服务器发送 AJAX(“A”)请求以获取购物车信息。
  • 服务器接受请求但什么都不做(好像正在处理一个长时间运行的脚本)
  • 当通过 AJAX(“B”)接收到新的购物车商品时,服务器会使用详细信息响应请求 A,并且购物车页面会根据需要更新表格。
  • 如果在合理的超时时间(30-120 秒)内没有检测到购物车活动,服务器会以“No Operation”响应并关闭连接。
  • 无论客户端收到哪个响应,它都会立即打开一个新的 AJAX 请求并重新开始。

实际上,您的 PHP 脚本然后处理检查数据库/会话/等以获取更新,并且客户端仅在“慢”服务器上等待。这就是 twitter 通过 API 实现各种提要的方式——每条新推文在生成时都会在新行中返回。

请注意,这可能很难实现,因为您只是将轮询从客户端转移到 PHP,但从 JavaScript 的角度来看,它确实使它更加优雅,消除了延迟并减少了浪费的网络开销。

于 2013-04-13T00:25:02.210 回答