Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery加载屏幕通过PHP覆盖大型mysql查询? 我正处于我的客户端的报告工具的中间,如果X天的话,基本上可以重新生成报告。_Php_Jquery_Mysql_Loading_Large Query - Fatal编程技术网

Jquery加载屏幕通过PHP覆盖大型mysql查询? 我正处于我的客户端的报告工具的中间,如果X天的话,基本上可以重新生成报告。

Jquery加载屏幕通过PHP覆盖大型mysql查询? 我正处于我的客户端的报告工具的中间,如果X天的话,基本上可以重新生成报告。,php,jquery,mysql,loading,large-query,Php,Jquery,Mysql,Loading,Large Query,问题是这些报告是用PHP重建的,其中一些可能相当大,这意味着加载时间为20-40秒 目前,它只是在执行查询时挂起页面 然而,我想做的是在查询开始之前在页面中放置某种jquery加载覆盖,然后在查询完成时重定向到另一个页面(在那里将显示结果) 我认为只要我在运行查询之前将html加载到页面中,加载屏幕就会显示出来,然后一旦查询完成,我就可以再放置一点html来对另一个页面进行元刷新(显然,头重定向是不可能的,因为头已经被发送了) 如果这是正确的,有人能推荐任何基于jquery的半体面加载插件吗 非

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

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

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

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

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


非常感谢

您应该使用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>

进度条

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

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

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

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


希望这能有所帮助。

我强烈建议不要按照您建议的方式来做,也不要看ajax。这是你建议的一种老式方法,你不能保证不同浏览器之间的行为。好的观点。大概我可以让一个加载器显示,直到ajax页面显示,然后它会说类似“报告重建,重定向到结果”。我们肯定会调查,因为这可能是一个更可靠的选择。谢谢理想情况下,您将通过ajax调用获得报告,因此您将显示加载程序,构建并下载报告,将其写入页面,然后删除加载程序。如果您可以点击一个已经生成并显示报告的页面,那么您就差不多完成了。这可能只需要几行代码就可以实现。