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,因为页面无法刷新。
答案 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 );