通知Ajax / Javascript后台PHP已完成

好的,这是情况 – 简单明了:

  • 在页面A:我们执行ajax请求(比如说back.php )启动后台进程 – 让我们说back.php
  • interm.php返回
  • back.php一直工作直到完成,同时在db中更新其进度。

那么,Page A如何得到back.php已经完成的通知?

(我已经想过,例如每隔1-2秒向一个脚本发出ajax请求,检查数据库是否有back.php的进度,但这看起来很奇怪,绝对没有效率……)

有任何想法吗?

您可以进行长轮询或短轮询技术,这种技术很常见,并不那么奇怪。 它确实会产生很多不必要的请求,但它是最简单,最受支持的方法。

第二种方法是使用Web套接字。 现在,通常不支持通过html5的网络套接字,但另一种方法是使用一个库来处理其他方法(如闪存)的后备,如果您的浏览器/设备不支持以前的方法,则需要长时间轮询方法。 一个非常好的实时通信库是Socket.IO。 它允许实时或接近实时的许多不同实现,它还允许您选择要使用的通信方法。 一些基于云的Web服务(如Paas)不能广泛支持Web套接字。 通过让您选择或强制使用特定的通信方法,库可以解决这个问题:Web套接字,Flash套接字,长轮询等。

但是既然你使用php,你可以试试这个: https : //github.com/lemmingzshadow/php-websocket

虽然正如其中一些网站所提到的,使用带有php的websockets并不像node.js或twisted python那样直截了当。 但尽管如此,它是可以实现的并且在某种程度上起作用。 我发现有一个node.js后端来做实时的东西比试图强制一种不打算以这种方式工作的技术要容易得多。

你基本上寻找的是Comet。 这是一个很好的主题:

使用PHP的彗星?