3

我正在为我的客户使用一个报告工具,如果它们已经存在 X 天,它基本上会即时重建报告。

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

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

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

我是否认为只要在运行查询之前将 html 加载到页面中,加载屏幕应该会显示,然后一旦查询完成,我可以放置另一位 HTML 来对另一个页面进行元刷新(显然,标头重定向是不可能的,因为标头已经发送)。

如果这是正确的,任何人都可以推荐任何基于 jquery 的加载插件吗?

非常感谢

4

2 回答 2

1

不太清楚,你写的意思

我是否认为只要在运行查询之前将 html 加载到页面中,加载屏幕应该会显示,然后一旦查询完成,我可以放置另一位 HTML 来对另一个页面进行元刷新(显然,标头重定向是不可能的,因为标头已经发送)。

但是让我告诉你,我们之前做了什么:

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

希望这可以帮助。

于 2012-08-24T09:45:56.263 回答
0

您应该使用 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>
于 2012-08-24T09:43:19.360 回答