Ajax - 在后台运行PHP脚本进行通信?

时间:2012-07-30 10:38:24

标签: php jquery ajax codeigniter

我怀疑这个问题看起来太......愚蠢,但我正试图让我的头脑找到一个很好的解决方案而且我有点卡住了。

所以,这是我的情况:

  • 我正在使用 Ajax 来执行一系列任务。实际上,我正在排队(或者有时平行,对我来说并不重要)1个或更多请求。
  • 以百分比显示进度(执行X任务中的1个)
  • 完成后,显示最终结果。

我正在尝试做什么:

  • 而不是运行3-4个不同的任务(=通过Ajax异步调用3-4个不同的PHP脚本),我想只有1个(= 1个脚本) - 换句话说,结合X脚本一个人。 (这很简单)。

我面临的问题:

  • 我怎么还能报告完成百分比(X任务中有1个)?

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

每次任务完成后,我都会更新Memcached中的密钥。然后你会让你的ajax调用只是从你的memcached键中获取值。

http://php.net/manual/en/book.memcached.php

答案 1 :(得分:1)

如果您的请求被原始ajax放入数据库,然后启动脚本,您仍然有时间(假设请求需要一些时间才能完成),以便将后续任务放入同一个数据库中由仍在运行的脚本拾取。

至于报告它,也许运行一个快速的jquery来查看队列中有多少项?或者让task.php文件更新数据库(甚至可能是另一个表),说明它已经完成了多少个工作以及当前还有多少个工作。

答案 2 :(得分:1)

如果您不需要向PHP脚本发送大量数据,则可以使用“long poll”方法。有了这个,您不使用AJAX,而是插入如下脚本标记:

<script src="my_php_script?task1=x&param_t1_1=42&task2=y"></script>

然后,PHP文件可以发回一个像

这样的JavaScript命令
updatePercent(12);
每个任务完成后

。这些命令应该在浏览器进入时执行。确保在每个任务后调用flush

调查Comet可能会为您提供有关如何处理客户端 - 服务器连接的其他建议。

答案 3 :(得分:0)

您可以在发送AJAX请求之前管理队列 - 将任务放入队列(可以是对象或数组)。使用complete函数异步运行AJAX,该函数将在完成后从队列中删除作业。 您可以同时更新进度并从队列中删除作业或使用setTimeout()单独处理它,这将检查队列中有多少任务以及总共放入了多少任务:%=(submitted_tasks - items_in_queue)/ submitted_tasks * 100