Jquery加载屏幕通过PHP覆盖一个大型mysql查询


Jquery loading screen to cover a large mysql query via PHP?

我正在为我的客户开发一个报告工具,如果报告已经存在X天,该工具基本上会动态重建报告。

问题是,报告是用PHP重建的,其中一些报告可能相当大,这意味着加载时间为20-40秒。

目前,它只是在执行查询时挂起页面。

然而,我想做的是在查询开始之前将某种jquery加载覆盖放置到页面中,然后在查询结束时重定向到另一个页面(在那里显示结果)。

我的想法是对的吗?只要我在运行查询之前将html加载到页面中,加载屏幕就会显示,然后一旦查询完成,我就可以放置另一点html来对另一个页面进行元刷新(显然,头部重定向是不可能的,因为头部已经发送了)。

如果这是正确的,有人能推荐任何半像样的基于jquery的加载插件吗?

非常感谢

不太确定,写是什么意思

我的想法是对的吗?只要我在运行查询之前将html加载到页面中,加载屏幕就会显示,然后一旦查询完成,我就可以放置另一点html来对另一个页面进行元刷新(显然,头部重定向是不可能的,因为头部已经发送了)。

但让我告诉你,我们早些时候做了什么:

通过点击XLS导出的导出按钮,会显示一个模式覆盖,并发送导出请求。从那一刻起,JS一直在寻找一个具有特定名称的cookie。在服务器端生成导出,并在完成后将cookie与XLS数据一起发送。JS识别了发送的cookie并隐藏了覆盖。

希望这能有所帮助。

您应该使用PHP函数flush()查看将输出刷新到屏幕的情况。它会给用户一个实际发生了什么的指示。有很多教程和代码片段向您展示了如何使用flush()设置JS/JQuery进度条。一个例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Progress Bar</title>
</head>
<body>
<!-- Progress bar holder -->
<div id="progress" style="width:500px;border:1px solid #ccc;"></div>
<!-- Progress information -->
<div id="information" style="width"></div>
<?php
// Total processes
$total = 10;
// Loop through process
for($i=1; $i<=$total; $i++){
    // Calculate the percentation
    $percent = intval($i/$total * 100)."%";
    // Javascript for updating the progress bar and information
    echo '<script language="javascript">
    document.getElementById("progress").innerHTML="<div style='"width:'.$percent.';background-color:#ddd;'">&nbsp;</div>";
    document.getElementById("information").innerHTML="'.$i.' row(s) processed.";
    </script>';
    // This is for the buffer achieve the minimum size in order to flush data
    echo str_repeat(' ',1024*64);
    // Send output to browser immediately
    flush();
    // Sleep one second so we can see the delay
    sleep(1);
}
// Tell user that the process is completed
echo '<script language="javascript">document.getElementById("information").innerHTML="Process completed"</script>';
?>
</body>
</html>