[英]Ajax File Download using Jquery, PHP
我想使用ajax功能下载,用户将点击下载链接(使用ajax和$ _GET)访问一个PHP文件,该文件将处理发送的$ _GET变量并访问正确的文件进行下载。
我有几个PHP脚本来处理$ _GET变量的处理,这些变量可以自己工作但是当使用Ajax访问时,它们就会停止工作。
我正在使用的Ajax / PHP代码如下:
function ajaxDown(){
$('#downloadmsg').html(
'<img src=\"media/images/ajaxloader.gif\" width=\"128\" height=\"15\">');
$('#downloadmsg').load(
'media/downloads/downManager.php?file=".$filequery['filename']."&ftype=".$downex[1]."');
}
请查看我的代码并帮助我找到我做错的事情。
感谢名单
我认为问题是你正在尝试加载文件结果INTO #downloadmsg,这是行不通的,因为.load()只会将结果加载为HTML ...不是二进制数据或其他编码。
一种可行的方法是在HTML中创建隐藏的iframe,如下所示:
<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>
然后,将iframe的attr设置为您的查询字符串:
$("#secretIFrame").attr("src","myphpscript.php?option1=apple&option2=orange");
然后使用PHP标头在设置源时强制下载(这是我的一个使用八位字节流的脚本的导出器头集的示例):
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=data.xls ");
header("Content-Transfer-Encoding: binary ");
希望这可以帮助!
我知道我迟到了! 但我认为我有一个更清洁的解决方案,而不使用隐藏的iframe,你甚至不需要ajax请求来做到这一点! 使用PHP头文件,如download.php文件中接受的答案中所述
<?php
//download.php
/*
All your verification code will go here
*/
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".$_GET['file']);
header("Content-Transfer-Encoding: binary ");
简而言之,在JS端
function download(filename){
window.location="http://whateveryoursiteis.com/download.php?file="+filename;
}
像魅力一样:O
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.