PHP AJAX Jquery - 文件下载问题

时间:2012-12-14 06:54:04

标签: php jquery ajax file download

  

可能重复:
  Downloading Via JQuery AJAX Post not working

filedownload.php下面是snippent。

$file = 'cut.png';
header("Content-Type: image/png");
header('Content-Disposition: attachment; filename="'.$file.'"');
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
readfile($file);
exit();

AJAX致电

jQuery.post('filedownload.php',{            
  'file'  :  result  // not used for the time being                    
 });

我对filedownload.php文件进行了ajax调用。它不允许用户下载文件。但如果我直接运行php它允许用户下载文件。可能是什么问题 ?

我想使用核心功能而不是使用jQuery插件。如果不可能,插件就可以了。

鉴于我使用ajax,因为页面无法刷新。

1 个答案:

答案 0 :(得分:3)

  

问题

     

我们以生产力网络应用程序为例,例如电子表格   编辑器,具有打开,保存,导入和导出的功能。该   打开和保存选项将涉及从中加载电子表格   数据库,而导入和导出处理本地文件   用户的机器。要实现导出行为,您可以决定   用户应该首先保存他们的电子表格,允许   您将数据从后端导出到文件。但我们假设   相反,您希望允许用户在不保存的情况下导出数据,   或许他们可以选择在没有任何地方在当地工作   在服务器上存储数据。为此,您需要发送   将当前的电子表格数据发送到后端并接收文件   下载。不幸的是,这无法使用Ajax来处理,因为   Ajax只能以文本的形式接收响应。在哪些情况下   要保存的数据相当冗长,这相当可观   问题

     

解决方法

     

为了发出请求,你需要定期(不是Ajax)   使用GET或POST的HTTP请求。如果数据相当短,你   可能会通过GET请求逃脱(也许只需设置   Window.location到您的导出网址),但由于浏览器的不同   对GET请求长度的限制,很可能需要POST。   以下插件允许您发出返回文件的请求   与jQuery的原生Ajax函数类似的语法。

jQuery Code修复了问题

jQuery.download = function(url, data, method){
    //url and data options required
    if( url && data ){ 
        //data can be string of parameters or array/object
        data = typeof data == 'string' ? data : jQuery.param(data);
        //split params into form inputs
        var inputs = '';
        jQuery.each(data.split('&'), function(){ 
            var pair = this.split('=');
            inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; 
        });
        //send request
        jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>')
        .appendTo('body').submit().remove();
    };
};

如何致电

$.download('filedownload.php','filename='+filename );

Read more