【问题标题】:PHPExcel : generating error due to php output?PHPExcel:由于php输出而产生错误?
【发布时间】:2013-01-09 21:48:01
【问题描述】:

使用 PHPExcel 构建电子表格后,我无法打开“另存为”或“打开”对话框。我直接从 PHPExcel 库附带的示例目录中获得了以下代码 sn-p。

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;

我的 JavaScript:

$(document).on('submit', '#myForm', function(e) {
        $.post('mail.php', $(this).serialize(), function (data) {
            $('.signature-field,.notes').hide();
            //SUCCESS
            $('.successORfail').html(data);
                setTimeout(function(){
                    $(".successORfail").fadeOut("slow", function () {
                        $(".successORfail").empty().show();
                    });
                }, 4500);
        }).error(function() {
            alert("Fatal Error: mail.php not found!");
        });
        e.preventDefault();
    });

注意:上面的代码会生成警告消息“Fatal Error: mail.php not found!”我设置的。除此之外,它不会生成任何错误消息,也不会保存或创建 Excel 文件。

当我使用以下方法时,没有任何标题,excel文件完美创建,并保存在服务器上,没有任何错误:

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('MyExcel.xlsx');

我非常感谢任何有关解决此错误的帮助,因为我已经为此工作了很长时间。

非常感谢!

【问题讨论】:

  • 刚发现它正在返回一些东西,这是$.post响应pastebin.com/embed_iframe.php?i=xjk2NjRZ
  • 我认为你不能像这样使用 ajax。为什么不做一个普通的帖子?用户将收到一个保存对话框提示,并且无论如何都会停留在同一页面上。另外:您的输出开头有一些 html,然后是您想要的 zip 文件。
  • @Maerlyn 不能使用常规帖子,因为用户在提交表单后通常需要访问页面上的输入字段。无论如何,当我不使用 php://output 时,这工作得很好,因此,ajax 不是问题。
  • 感谢您的建议,但是,我认为这样做没有任何理由。添加 php://output.js 后,我的脚本立即停止正常工作。 Ajax 不是问题。
  • 你得到了正确的输出,所以你的脚本仍然有效,你只是没有得到下载弹出窗口。

标签: php javascript jquery ajax phpexcel


【解决方案1】:

您实际上无法按照您尝试执行此操作的方式执行此操作。 Javascript 本身无法在用户系统上启动文件下载(由于安全问题)。我知道至少有一个 jQuery 插件可以提供类似 AJAX 的下载体验。你可以看看这个:

http://johnculviner.com/post/2012/03/22/Ajax-like-feature-rich-file-downloads-with-jQuery-File-Download.aspx

【讨论】:

  • 我知道 javascript 的安全问题。我用 PHP 下载而不是用 javascript。
  • PHP 正在为下载提供服务,但您正尝试使用 javascript 来启动它。这就是你的问题。显示的插件解决了这个问题,它创建了一个隐藏的 iframe,该 iframe 设置为下载位置(从而强制文件提示),同时似乎使用户保持在同一页面上。一个相当不错的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多