【问题标题】:Notify Ajax/Javascript that background PHP has completed通知 Ajax/Javascript 后台 PHP 已完成
【发布时间】:2012-08-01 10:21:23
【问题描述】:

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

  • 在页面 A 上:我们执行一个 ajax 请求(假设是 intermediate.php),它会启动一个后台进程 - 假设是 back.php
  • interm.php返回
  • back.php 一直工作直到完成,同时在数据库中更新其进度。

那么,页面 A 怎么会收到 back.php 已完成的通知?

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

有什么想法吗?

【问题讨论】:

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

标签: php javascript jquery ajax


【解决方案1】:

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

第二种方法是使用网络套接字。现在通常不支持通过 html5 的 Web 套接字,但是如果您的浏览器/设备不支持以前的方法。一个非常好的实时通信库是 Socket.IO。它允许许多不同的实时或接近实时的实现,它还允许您选择要使用的通信方法。一些基于云的 Web 服务(例如 Paas)并未广泛支持 Web 套接字。库将通过让您选择或强制使用特定的通信方法来解决此问题:Web Sockets、Flash Sockets、Long-Polling 等。

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

尽管在其中一些网站上提到过,但将 websockets 与 php 结合使用并不像 node.js 或 twisted python 那样简单。但尽管如此,它是可以实现的,并且在某种程度上确实有效。我发现拥有一个 node.js 后端来做实时工作比尝试强制采用一种不应该以这种方式工作的技术要容易得多。

【讨论】:

    【解决方案2】:

    您基本上要寻找的是彗星。这是一个很好的线程:

    Using comet with PHP?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多