我有以下情况:
Wordpress插件(短代码)显示带有“提交”按钮的表单。按下提交按钮后,将生成Excel 2007文件(.xlsx)并将其发送到浏览器以通过HTTP标头下载。 这在Chrome和Firefox中完美运行,但是当我使用Microsoft Edge浏览器(v.40.15063.0.0)或Internet Explorer(v.11.540)尝试此操作时,不会触发下载,而是直接重定向到
http://example.com/wp-admin/admin-ajax.php
并停止。
我怀疑它与插件(php)发送的标题有关。当我从
更改内容类型标题时Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
到
Content-Type: application/vnd.ms-excel
它启动文件下载,但文件为空(并且文件名错误),因为我生成的文件是Excel 2007,但后者的内容类型是旧的Excel文件版本(我不想生成)。我也尝试了添加的两种内容类型; charset = utf-8具有相同的结果。
摘自我的主要插件文件:
add_action( 'wp_ajax_myplugin_generate_report', 'handle_report_request' );
add_action( 'wp_ajax_nopriv_myplugin_generate_report', 'handle_report_request' );
function handle_report_request() {
// Check the nonce
if ( empty($_POST) || !wp_verify_nonce($_POST['abcd'],'myplugin_generate_report') ) {
exit;
}
try {
$date = new DateTime("now");
$output_filename = "Report_Prefix" . $date->format("Ymd");
$writeExcel($output_filename);
} catch (Exception $ex) {
echo "Error generating report: " . $ex->getMessage();
} finally {
wp_die();
}
}
function writeExcel($outputFilename) {
$excelObj = new PHPExcel();
[... populating PHPExcel object ...]
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true, 200);
header('Content-Disposition: attachment;filename="' . $outputFilename . '.xlsx"');
// header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header('Cache-Control: max-age=0');
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($excelObj, 'Excel2007');
$objWriter->save('php://output');
}
带有表单元素的HTML / PHP代码:
<form action="<?php echo admin_url('admin-ajax.php'); ?>" method="post">
<?php wp_nonce_field('myplugin_generate_report','abcd'); ?>
<input name="action" value="myplugin_generate_report" type="hidden">
<input type="submit" value="Generate report">
</form>
我尝试停用/更改某些标题,但没有效果。 Edge拒绝生成文件。