2010-08-30 70 views
19

我想要使用ajax功能下载,从而用户将点击下载链接,将(使用ajax和$ _GET)访问PHP文件,它将处理发送的$ _GET变量和访问正确的文件下载。Ajax文件下载使用jQuery,PHP

我有几个PHP脚本来处理自己工作的$ _GET变量的处理,但是当使用Ajax访问时,它们停止工作。

使用的Ajax/PHP代码IM低于:

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]."'); 
} 

请仔细看一下我的代码,并帮助我找到什么即时通讯做错了。

感谢名单

+0

请出示什么样的代码'downManager.php'发出。 – 2010-08-30 11:33:32

+0

这不是一个非问题?如果我在任何给定页面中单击“下载此文件”,并且该文件是可下载的,那么它将在没有给定页面重新加载的情况下下载。我错过了什么吗? – 2010-08-30 13:07:08

+0

@Pekka - downManager.php打开请求下载的文件,例如pdf – 2010-08-31 10:38:18

回答

54

我认为问题是,你正在试图加载文件的结果INTO #downloadmsg,这是行不通的,因为.load()只会加载搜索结果为HTML .. .NOT二进制数据或其他编码。

一种方法可能的工作是创建在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 "); 

希望这会有所帮助!

+0

我认为这可能是问题让我试试你的解决方案。谢谢 – 2010-08-31 10:38:48

+0

嗯。这个窍门对我有用。谢谢+1 – Awan 2011-04-26 06:59:43

+0

非常感谢您提供此解决方案 – mangia 2012-08-31 21:57:19

5

我知道我迟到了!但我认为我有一个解决方案,如果不使用隐藏的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型

+0

不适用于发布请求 – 2016-09-22 09:03:55

+0

它不应该与发布请求一起工作,它将在URL中传递参数。在我上面的注释中,我提到你完全不使用ajax来执行下载。 – ksealey 2016-09-22 13:43:13