“加载[Total]”进度条的记录号[##]

时间:2012-07-13 17:54:57

标签: php javascript ajax progress

我有一个可能没有解决方案的问题,但希望有人可以解决这个问题。

我开发了一个PHP / MySQL网站,它使用HTML / CSS来处理工资单。当用户提交过去(2周)期间的工资核算时,它会处理每个员工的工作时间。对于拥有<50名员工的公司,它可以非常快速地处理它,但对于拥有100多名员工的公司来说,处理可能需要很长时间。我理想情况下不是通用的“加载”栏或估计的“35%加载”栏,因为每个公司的工资单在员工数量上会有很大差异。

最好的解决方案是,只要他们提交了付款期限,我就可以从PHP / MySQL处理器/数据库中传递总记录数,然后在每个员工从PHP处理器处理时更新数字,这样用户将看到“处理员工35的134”,例如“35”将增加并在处理每个记录时更新。或者,如果不可能,我甚至可以使用动态列表,例如:

处理134的员工1 处理员工2 of 134
处理员工3 of 134
处理员工4 of 134
等等...

Ajax或Javascript似乎是实现这一目标的最佳选择,但是我还无法弄清楚如何使用它们来实现这一目标。任何帮助或见解将不胜感激。如果我发现任何内容,我会继续查看和更新​​这篇文章。

3 个答案:

答案 0 :(得分:0)

我通过在批处理中调用PHP中的flush()命令来完成这项工作,但你可能会变得棘手并更新隐藏字段并在setTimeOut上有一个javascript函数检查该值并更新进度条

进度条:

我对动态列表的处理方式是:

 $count = 0;

 // some db query

 // start output
 echo "<ul>";

 // iterate through records and perform dynamic insert

   $count ++;
   echo "<li>Processed " . $count . " records.</li>";
   flush();

 // end iteration

 // end output
 echo "</ul>";

如果您只想更新每个%的记录,那么就像您所说的获得总计数一样,那么也许在if子句中使用模数运算符。例如,如果你有50条记录而你想每5条更新一次,if($ count mod 5 == 0){echo ... flush()}

答案 1 :(得分:0)

你必须结合Mike S.建议和快速ajax调用(比如每500毫秒)你可以对从PHP文件中写入的文本文件进行ajax调用....

例如:

<?php
    $count = 0;

mysql_connect('blahblah');
 // start output

$query = mysql_query("SELECT ...");
while($rs = mysql_fetch_assoc($query)) {
    $fh = fopen('filename.txt','w');
    fwrite($fh, $count);
    fclose($fh);
    ++$count
}
?>

然后你需要每隔500毫秒(或者比那个更快)对该filename.txt文件进行ajax调用,并读取该文件的内容以查看处理请求的距离。您甚至可以执行类似的操作来写入php文件的内容[current_count] - [total_count](记录15条记录中的15条记录中的15条记录),并在您的javascript编码中执行results.split('-')

答案 2 :(得分:0)

我的方法是将记录总数和当前记录号存储在会话变量中。然后设置一个php页面,返回文本/ html“Processing employee $ currentRec of $ totalRec”。

当您从主页面提交请求时,在页面上显示div以显示状态消息。触发ajax请求以处理数据,并在完成后隐藏div。处理记录的代码可以随着时间的推移更新会话变量。同时触发定期的ajax请求,获取状态消息并使用响应更新div的内容。继续这个直到div不再可见。您应该在处理数据时弹出的页面上显示状态消息以显示当前记录编号,并根据您设置更新计时器的方式随时更新。

确切的实现取决于你是使用jQuery,原型,普通Javascript等......