通知Ajax/Javascript后台PHP已完成

通知Ajax/Javascript后台PHP已完成,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,好的,情况是这样的——简单明了: 在第A页:我们执行一个ajax请求(比如对intermediate.php),该请求启动一个后台进程-比如说back.php interm.php返回 back.php一直工作到完成,同时在数据库中更新进度 那么,页面A如何得到back.php已完成的通知呢 (例如,我曾想过每隔1-2秒向脚本发送一个ajax请求,检查db的back.php进度,但这看起来很奇怪,而且绝对没有效率……) 有什么想法吗?您可以使用长轮询或短轮询技术,这种技术非常常见,也不太奇怪

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

  • 在第A页:我们执行一个ajax请求(比如对
    intermediate.php
    ),该请求启动一个后台进程-比如说
    back.php
  • interm.php
    返回
  • back.php
    一直工作到完成,同时在数据库中更新进度
那么,页面A如何得到
back.php
已完成的通知呢

(例如,我曾想过每隔1-2秒向脚本发送一个ajax请求,检查db的
back.php
进度,但这看起来很奇怪,而且绝对没有效率……)


有什么想法吗?

您可以使用长轮询或短轮询技术,这种技术非常常见,也不太奇怪。它确实会发出很多不必要的请求,但它是最简单、最受支持的方法

第二种方法是使用web套接字。现在,通过html5的web套接字目前还不受普遍支持,但另一种选择是使用一个库,该库负责对其他方法(如flash)进行回退,如果您的浏览器/设备不支持以前的方法,甚至可以进行长时间轮询。Socket.IO是一个非常好的实时通信库。它允许许多不同的实时或接近实时的实现,还允许您选择要使用的通信方法。一些基于云的web服务(如Paas)并不广泛支持web套接字。库将通过允许您选择或强制使用特定的通信方法来解决此问题:Web套接字、Flash套接字、长轮询等

但由于您使用的是php,您可以尝试以下方法:


尽管在其中一些网站上提到过,但将WebSocket与php结合使用并不像node.js或TwistedPython那样直截了当。但尽管如此,这是可以实现的,并且在一定程度上确实有效。我发现有一个node.js后端来做实时的事情比试图强制使用一种不应该以这种方式工作的技术要容易得多。

你基本上想要的是Comet。这里有一条很好的线索:


ajax调用是异步的,因此将PHP脚本作为后台进程运行没有什么实际好处。你能不能按常规方式运行它,并保持xmlHTTPrequest打开,直到PHP脚本完成,然后返回一些内容(PHP中默认允许30秒来保持连接打开)??@adeneo 1)我的脚本可能需要运行2-3分钟以上。2) 脚本分为不同的子任务(因此我想通知用户进度-例如,X中有2个完成)。3) 显然,我必须知道整件事什么时候结束。:-)