我有一个PHP脚本,可以从MySQL DB生成.CSV导出文件。后端脚本格式化输出并使用header()
打开浏览器中的弹出窗口以下载.CSV。 - 经过测试并且工作正常。
我还有一个网页,其中有一个图形按钮,当您单击图形按钮时,它会启动对服务器的Ajax调用以生成下载.CSV文件。
我使用JavaScript alert()
测试了点击事件,但效果很好。
我使用Ajax调用测试了click事件,但没有任何反应。好像我在某种程度上需要指示后端脚本的行为有点不同。
以前有人做过类似的事吗?
感谢。
* HMTL(摘录) *
<div id="exportButton"><img src="images/export.png" alt="Export to Microsoft Excel Graphic" /></div>
<h2>Page Title</h2>
<br clear="all" />
<div id="pageContent_wrapper">...
* JavaScript *
<script>
jQuery.support.cors = true; // needed for ajax to work in certain older browsers and
versions
$(document).ready(function(){
$('#exportButton').click(function() {
//alert('button clicked');
$.ajax({
url: "http://mydomain.com/js/ajax/exportCSV.php"
});
});
}); // end .ready()
</script>
我正在尝试完成此功能,而无需将用户发送回服务器。我希望用户留在页面上。
答案 0 :(得分:3)
您无法从AJAX调用中进行下载。最简单的解决方案是将按钮包装在<a>
元素中,让浏览器自然地处理下载。如果您真的需要涉及JS,请将document.location
更改为指向下载PHP而不是调用AJAX。
答案 1 :(得分:1)
您可以通过将Content-type
标头设置为浏览器默认下载的内容(例如可执行文件)来强制下载文件。以下是执行此操作的PHP脚本的快速示例:
header('Content-disposition: attachment; filename=huge_document.pdf');
header('Content-type: application/pdf');
readfile('huge_document.pdf');
来源:http://webdesign.about.com/od/php/ht/force_download.htm
使用此方法,您可以直接链接到PHP脚本并避免JS调用。请注意,强制Content-type
PDF会强制在某些浏览器中下载,并在某些浏览器中打开PDF Viewer插件。