php - PHP 用 xlsxwriter / ajax / 导出 xlsx 文件
问题描述
我对 PHP 的 xlsxwriter 库有疑问。我有一个 mysql 数据库,我想用一个按钮从 db 下载数据到一个 excel 文件中。如果我将 url 粘贴到 webbrowser 栏中,它会生成并正确下载 excel 文件(链接示例https://www.example.com/inc/service.php?action=downloadXls&gestione=2 ")但是如果我使用 ajax 调用
$("#frmfileima").submit(function(e){
e.preventDefault();
var fdate = $('#firstdate').val();
var ldate = $('#lastdate').val();
$.ajax({
method: "GET",
url: "inc/service.php?action=downloadXls&gestione=4",
data: {fdate: fdate, ldate: ldate},
});
});
没啥事儿。在 chrome 预览中我只能看到这段代码
PKDN docProps/PKDNÈì«docProps/app.xmlÏ1Â0àÝ_Q²ÛTIÓAqv¨î!¹j ¹É)í¿7"ØÝí>Þ©n
cõ=a+6u#*@KÎã½×þ¼Þ*³AgFBhÅYtz¥."$ö«"`nÅ9¤ÌöÁäºÔXR0\bºKoáDöYnf'ab@n øÿ:²}ùÖϱxZõÄfì}Ý(¹u¤
ÎZÉåZ>ÓoPKDN4îWp6DdocProps/core.xmlmÁNÃ0Dï|Eä{b'-U±ôê $$@ܽ´Ä±ìmÓþ=NÒõ¶ã}Z{/öuíÀyݤ #Ù(mÖy]-ã9<
£DÕ(È<Y7¹´\6]cÁ¡ñ\Úl-§ÔË
ÔÂ'!aùÕ¸Z`nM?b
我认为是文件 xlsx 代码源。
在 service.php 我尝试了所有类型的标题
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=".XLSXWriter::sanitize_filename($filename)."");
header("Pragma: no-cache");
header("Expires: 0");
如何?问题出在哪里?多谢
解决方案
您不能只使用 JavaScript 通过 AJAX 下载文件并将其保存到用户的计算机,因为这会带来安全问题。您将不得不使用变通方法。有两个通用选项:
- 将浏览器重定向到您的下载 URL,最好是作为新选项卡。您可以像这样提供在 URL 中编码的数据:
$("#frmfileima").submit(function(e) {
e.preventDefault();
var fdate = $('#firstdate').val();
var ldate = $('#lastdate').val();
window.open('inc/service.php?action=downloadXls&gestione=4&fdate=' + encodeURIComponent(fdate) + '&ldate=' + encodeURIComponent(ldate), '_blank');
});
- 如果您想更好地控制您的下载,您可以使用一个 jQuery 插件,例如这个,它为您提供了类似 AJAX 的下载功能。
推荐阅读
- graphql - 如何使用 AWS Amplify 搜索 @connection
- vb.net - VB.NET 使用 BOM 将 XML 文档保存为 UTF-8
- wordpress - 有没有办法在从联系表格 7(WordPress)插入数据时触发 google sheet 脚本
- python - 将文件中的文本块解析为对象
- python-3.x - pipenv 问题让 MarkupSafe 自动安装为依赖项
- amazon-web-services - 私有子网中的 AWS EC2 实例未从面向 Internet 的 NLB 接收流量
- django - 如何解决 django 管理界面上的错误
- javascript - 使用 java 脚本设置 html 按钮图像
- angular - Angular 9 相同的路由路径不同的组件
- d3.js - d3 - 更新宽度和 X 以在水平堆叠条形图中平滑过渡