0

我正在构建一个 PHP 应用程序,当用户提交三页 HTML 表单中的最后一页时,其中一部分将导出 Excel 文件。这需要一段时间来处理,所以在提交表单时,我会在处理开始之前使用 JavaScript 弹出一个“请稍候”弹出窗口。然后通过设置下面的标题在用户机器上创建和下载文件

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' .  $fileName . '.xls' .'"');
header('Cache-Control: max-age=0');

我遇到的问题是,我需要将用户重定向回表单的第一页。我无法回显 javascript location.href 调用,因为在此之前内容类型已经更改,因此它永远不会出现在屏幕上。出于同样的原因,我也不能使用标准的 PHP header('Location: x') 重定向。

我的问题是,在以上述方式将输出转移到文件之后,我怎样才能将输出返回到屏幕以回显 JavaScript 重定向,或者以其他方式将用户重定向到新页面?

与往常一样,非常感谢任何帮助。

詹姆士

4

3 回答 3

0

如上所述,在页面加载后无法发送新标题,但有一种方法可以获得我想要的功能。

答案是创建一个 AJAX 调用,在 setInterval 循环中运行,该循环在 PHP 中查找 $_SESSION 变量。这个会话变量是在创建 Excel 文件后设置的(我之前试图在其中放置重定向),导致 AJAX 函数返回成功,然后执行 location.href 重定向到正确的页面。

于 2013-06-05T11:56:50.083 回答
0

下面的代码可以做到。它可以重定向您发送下载请求的最后一页,无需回显内容,只有 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);
于 2013-06-05T12:22:30.607 回答
0

试试这个代码

 <?php
    echo "<script>
    window.location='page.php';
    </script>";
    ?>
于 2013-06-05T10:15:23.740 回答