我正在构建一个PHP应用程序,当用户提交三页HTML表单中的最后一页时,其中一部分将导出Excel文件。这需要一段时间来处理,所以在表单提交时我会在处理开始之前使用JavaScript调出一个“Please Wait”弹出窗口。然后通过设置
下面的标题在用户计算机上创建和下载该文件header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $fileName . '.xls' .'"');
header('Cache-Control: max-age=0');
我遇到的问题是,我需要将用户重定向回表单的第一页。我无法回应javascript location.href调用,因为在此之前内容类型已经被更改,因此它永远不会进行屏幕显示。由于同样的原因,我也不能使用标准的PHP标题('Location:x')重定向。
我的问题是,在以上述方式将输出转移到文件后,我怎样才能将输出返回到屏幕以回显JavaScript重定向,或者以其他方式将用户重定向到新页面?
与往常一样,非常感谢任何帮助。
詹姆斯
答案 0 :(得分:0)
试试此代码
<?php
echo "<script>
window.location='page.php';
</script>";
?>
答案 1 :(得分:0)
如上所述,在页面加载后无法发送新的标题,但有一种方法可以获得我想要的功能。
答案是创建一个AJAX调用,在setInterval循环中运行,该循环在PHP中查找$ _SESSION变量。此会话变量在创建Excel文件之后设置(我之前尝试放置重定向),导致AJAX函数返回成功,然后执行location.href重定向到正确的页面。
答案 2 :(得分:0)
以下代码可以做到。它可以重定向你发送下载请求的最后一页,不需要echo内容只有readfile可以这样做,所以页面会在下载框出现后自动卸载。
$ path是用户下载文件的路径
header("Content-type: application/vnd.ms-excel");
header('Content-Disposition: attachment; filename="'.$path.'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header("Cache-Control: public");
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
readfile($path);