通知Ajax/Javascript后台PHP已经完成

Dr.*_*eon 2 javascript php ajax jquery

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

  • 在页面A:我们执行ajax请求(让我们说intermediate.php)启动后台进程 - 让我们说back.php
  • interm.php 回报
  • back.php 继续工作直到完成,同时在数据库中更新其进度.

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

(我认为例如每隔1-2秒向一个脚本发出ajax请求,检查数据库back.php的进度,但这看起来很奇怪,绝对不高效...)

有任何想法吗?

Dan*_*iel 6

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

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

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

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