【问题标题】:Jquery loading screen to cover a large mysql query via PHP?Jquery 加载屏幕通过 PHP 覆盖大型 mysql 查询?
【发布时间】:2012-08-19 20:47:16
【问题描述】:

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

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

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

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

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

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

非常感谢

【问题讨论】:

  • 我强烈建议不要按照您建议的方式进行操作并查看 ajax。这是您建议的旧式方法,您不能保证浏览器之间的行为。
  • 好点。大概我可以在显示 ajax 页面之前显示一个加载器,然后显示类似“report rebuilt,redirecting to results”之类的内容。肯定会研究它,因为它可能是一个更可靠的选择。谢谢!
  • 理想情况下,您将获得作为 ajax 调用结果的报告,因此您将显示一个加载器,构建和下载报告,将其写入您的页面,然后删除加载器。如果您可以点击已经构建并显示报告的页面,那么您几乎完成了。完成这项工作可能只需要几行代码。

标签: php jquery mysql loading large-query


【解决方案1】:

不太清楚,你写的是什么意思

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

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您应该查看使用 PHP 函数 flush() 将输出刷新到屏幕上。它会给用户一个指示,表明某些事情正在实际发生。有很多教程和代码 sn-ps 向您展示如何使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2011-12-08
      相关资源
      最近更新 更多