Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从其他页面更改页面内容_Php_Jquery_Ajax_Cart - Fatal编程技术网

Php 如何从其他页面更改页面内容

Php 如何从其他页面更改页面内容,php,jquery,ajax,cart,Php,Jquery,Ajax,Cart,我正在尝试将此功能添加到我的PHP购物车中 假设我们有两个页面:catalog.php和cart.php 我想做的是: 用户单击catalog.php上的“添加到购物车”按钮 并通过jQuery向cart.php发送关于添加了哪个产品的信息(这一切正常),触发一个ajax请求,并通过在不刷新页面的情况下包含刚刚添加的产品,使cart.php页面自身更新(这是我无法工作的部分) 如果我将这两个页面并排放置,然后单击“添加到购物车”,什么都不会发生,只有在页面刷新(cart.php)时,我才看到添加

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

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

我想做的是:

用户单击catalog.php上的“添加到购物车”按钮 并通过jQuery向cart.php发送关于添加了哪个产品的信息(这一切正常),触发一个ajax请求,并通过在不刷新页面的情况下包含刚刚添加的产品,使cart.php页面自身更新(这是我无法工作的部分)

如果我将这两个页面并排放置,然后单击“添加到购物车”,什么都不会发生,只有在页面刷新(cart.php)时,我才看到添加了新产品

有办法把这个归档吗

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

上次我检查时,只有使用
窗口打开的页面。打开
(或使用
链接打开)我们可以互相交谈

因此,在catalog.php调用
cart=window.open('cart.php')
中,
cart
包含打开它的页面的窗口对象,因此您可以执行以下操作:

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

';
要让windows通过一个打开另一个来并排对话,您可以使用HTML5本地存储,但这需要一些更高级的技巧。

您可以通过对
Cart.php
进行AJAX调用来模拟这一点,该调用检查(会话/db)以查看是否添加了新内容

我建议做点像

  • php每隔10-60秒进行一次AJAX调用,并要求提供购物车中产品的完整列表
  • 任何新项目都会根据需要添加到表中(通过检查产品ID或订单项目ID)。您还应更新数量/等
这样,无论使用何种机制添加项目,购物车都会很快看到它们

显然,您的投票频率越高,购物车更新的速度就越快,但您在系统上的负载就越大

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

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

它被称为长轮询(请参阅),实际上发生的是

  • 客户机向服务器发送AJAX(“A”)请求以获取购物车信息
  • 服务器接受请求,但不执行任何操作(就好像正在处理一个长时间运行的脚本)
  • 当通过AJAX(“B”)接收到一个新的购物车项目时,服务器用详细信息响应请求a,购物车页面根据需要更新表
  • 如果在合理的超时时间(30-120秒)内未检测到任何购物车活动,服务器将以“无操作”响应响应并关闭连接
  • 无论客户机收到哪个响应,它都会立即打开一个新的AJAX请求并重新开始
实际上,您的PHP脚本然后处理检查数据库/会话/等的更新,而客户端只在“慢”服务器上等待。这就是twitter通过API实现各种提要的方式——每一条新tweet在生成时都会返回一行


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

catalog.PHP和cart.PHP是如何呈现给用户的?不同的框架,弹出窗口或什么?也许你可以分享一些代码。非常感谢你的回答!今天早些时候,我使用数据轮询试图找到一个解决方案,但我仍然不满意。您能想出一种在cart.php中设置事件侦听器的方法,使“自动自我更新”成为可能吗?Catalog.php通过AJAX将产品id发送到cart.php->cart.php触发器中的事件侦听器->通过php cart内容的请求->包含所有产品的更新div(cart.php)酷我喜欢,你基本上回答了我的问题。非常感谢,我希望这个链接能帮助其他人,很高兴我能帮助他们。如果你认为我的答案涵盖了你的所有观点,请把它标记为接受(点击左边的记号),并考虑对它进行投票(向上箭头)。如果没有,请告诉我您需要的更多信息。事实上,我已经在我的答案中找到了指向该页面的链接,但也许我应该让它更清楚?(完成)非常感谢您的回答。使用HTML5是我喜欢的一个想法,我在今天早些时候使用服务器发送事件,然后放弃并寻求帮助。我认为本地存储可以替代我的php代码,基本上为用户提供与我的购物车相同的功能,但我想不出一种使用它的方式来获得我想要的东西。您呢?您需要执行
setTimeout
并每隔1/2秒左右轮询本地存储对象以获取新数据。然后将新数据添加到localstorage。这些人对其进行了以下操作: