是否可以进行Ajax调用并使用PHP返回标头?

时间:2012-03-09 19:46:22

标签: php jquery ajax http-headers

我有一个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>

我正在尝试完成此功能,而无需将用户发送回服务器。我希望用户留在页面上。

2 个答案:

答案 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插件。