1

我正在从 CSV 文件中导入 4000 行。第 1 页显示带有 PROCESS 按钮的服务器上的 CSV 文件。 Onclick按钮,我使用JQuery Ajax调用执行导入的必要PHP 代码。在进行相关检查、更新记录和插入记录等操作后,整个导入过程大约需要 30 秒到 1 分钟。

我要做的是在处理 php 代码时显示此导入的进度。IE:

Total records to import: 4000
Total users imported: 20 [div id=usersImported - this number dynamically increments while importing]
Total users updated: 30 [div id=usersUpdated - same here re incrementing]
Etc..

我不确定正确的问题是什么,因为我尝试DIVs (usersImported and usersUpdated)从 php 代码更新 - 无法让它工作。这只是将我的脚本代码返回到浏览器,但实际上并没有执行它

我还尝试在更新或插入 php 后在 php 中进行回显。即:usersImported1 然后 usersImported2 然后 usersImported3 .. 然后在我的 JQuery 成功中我正在尝试:

if( txt.match( "usersImported" ).length > 0 ) { ..使用带有前导数字的更新 div innerHTML 代码..

这不起作用,因为 php 在处理时没有刷新,即使我已经尝试过ob_flush();flush();或者是因为成功仅在整个 php 代码完成后才在 ajax 中运行?是否有 JQuery while: 命令?

所以我猜真正的问题是:这样做的正确方法是什么?从 PHP 更新 DIV 还是从基于 PHP 回声的 $ajax 更新 div?这类似于进度条更新,除了我想根据处理期间发生的情况更新某些 div。

我会很感激一个基本的例子或一个工作样本的链接。

4

2 回答 2

0

猜猜ajax不会触发,因为您没有关闭http,它会坐下来等待更多的到来。

您需要在服务器上流式传输或分块您的工作。

一个肮脏的修复方法是让更新程序将百分比写入静态公共文件,由客户端读取并继续轮询该文件。(添加一个随机查询字符串,以便获得通过缓存)。

于 2012-05-15T08:58:05.243 回答
0

没有任何直接的方法。您可以将 PHP 进程状态写入任何外部源,例如fileor database,并在特定时间后在客户端读取该状态。

希望这篇文章能给你一个方向:

于 2012-05-15T09:01:09.627 回答