如何更改其他页面的页面内容

时间:2013-04-12 23:58:17

标签: php jquery ajax cart

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

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

我想做的是:

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

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

有没有办法实现这个目标?

编辑:我不太清楚我很抱歉 页面以标准方式呈现,没有框架没有弹出窗口 “app”按预期工作,这对用户来说不太可能是一个问题 “并排”的原因只是因为我想知道一种获取此功能的方法,因为我可以看到自己将来使用它几乎任何东西(来自pageA,CSS等的pageB的DOM操作)

2 个答案:

答案 0 :(得分:0)

我上次检查过,只有使用window.open打开的页面(或使用<a target="_blank">链接打开的页面)可以互相交谈。

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

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

要让Windows并排打开而不打开另一个,您可以使用HTML5本地存储,但这需要一些更高级的魔法。

答案 1 :(得分:0)

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

我建议像......

  • Cart.php每隔10-60秒拨打一次AJAX电话,并要求购物车中有完整的产品清单。
  • 根据需要将任何新项目添加到表中(通过检查产品ID或OrderItem ID)。您还应该更新数量/等。

这样,无论使用何种机制添加物品,购物车都会在不久之前看到它们。

显然,您投票的次数越多,购物车更新的速度就越快,但您对系统的负担就越大。

现在直接可能的原因是AJAX请求总是由客户端而不是服务器启动。

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

它被称为长轮询(见this answer),实际上会发生什么......

  • 客户端向服务器发送AJAX(“A”)请求以获取购物车信息。
  • 服务器接受请求,但不执行任何操作(就像正在处理长时间运行的脚本一样)
  • 当通过AJAX(“B”)收到新的购物车项目时,服务器会响应请求A并提供详细信息,购物车页面会根据需要更新该表格。
  • 如果在合理的超时(30-120秒)内未检测到购物车活动,服务器将以“无操作”响应进行响应并关闭连接。
  • 无论客户端收到什么响应,它都会立即打开一个新的AJAX请求并重新开始。

实际上,您的PHP脚本会处理检查数据库/会话/ etc的更新,而客户端只等待“慢”服务器。这就是Twitter如何通过API实现各种提要 - 每条新推文在生成时都会在新行上返回。

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