Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jquery、PHP下载Ajax文件_Php_Jquery_Ajax - Fatal编程技术网

使用Jquery、PHP下载Ajax文件

使用Jquery、PHP下载Ajax文件,php,jquery,ajax,Php,Jquery,Ajax,我想使用ajax功能进行下载,用户将单击下载链接(使用ajax和$\u-GET)访问PHP文件,该文件将处理发送的$\u-GET变量并访问正确的文件进行下载 我有一些PHP脚本来处理$\u GET变量的处理,这些变量可以自己工作,但是当使用Ajax访问时,它们就停止工作了 im使用的Ajax/PHP代码如下: function ajaxDown(){ $('#downloadmsg').html( '<img src=\"media/images/ajaxloader.gif\"

我想使用ajax功能进行下载,用户将单击下载链接(使用ajax和$\u-GET)访问PHP文件,该文件将处理发送的$\u-GET变量并访问正确的文件进行下载

我有一些PHP脚本来处理$\u GET变量的处理,这些变量可以自己工作,但是当使用Ajax访问时,它们就停止工作了

im使用的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]."');
}
函数ajaxDown(){
$('#downloadmsg').html(
'');
$('#downloadmsg').load(
'media/downloads/downManager.php?file=“.$filequery['filename']”和ftype=“.$downex[1]”);
}
请看一下我的代码,帮我找出我做错了什么


Thanx

我认为问题在于,您试图将文件结果加载到#downloadmsg中,这是行不通的,因为.load()只将结果加载为HTML…而不是二进制数据或其他编码

一种可能有效的方法是在HTML中创建隐藏的iframe,如下所示:

<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>
然后在设置源代码时使用PHP头强制下载(下面是我的一个脚本中使用八位字节流的导出器头集的示例):


希望这有帮助

我知道我迟到了!但是我认为我有一个解决方案,它没有使用隐藏的iframe,而且更简洁,而且你甚至不需要ajax请求就可以做到这一点!在download.PHP文件中使用已接受答案中所述的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 ");

工作起来很有魅力:O

请显示downManager.php发出的代码是什么类型的。这不是一个问题吗?如果我在任何给定页面中单击“下载此文件”,并且该文件可以下载,那么它将在不重新加载给定页面的情况下下载。我遗漏了什么吗?@Pekka-downManager.php打开请求下载的文件,例如一个pdfI,我想这可能是问题所在,让我试试你的解决方案。Thanx非常感谢这个解决方案,为什么这些解决方案一经看到就这么简单!我所需要的只是你的秘密iframe和attr change想法来解决我的问题!谢谢秘密iframe允许在后台运行ajax时仍然更改页面,并且仍然填充标题!(这是我在普通AJAX调用中遇到的问题)再次感谢!设置多个内容类型标题是一种不好的做法,header()会覆盖以前设置的相同类型的值。参见I bereave中的#2,更准确的做法是删除前两个头并用以下内容替换第三个头:
头(“缓存控制:必须重新验证,后检查=0,预检查=0,最大年龄=0,公共”)但可能是专用于某些buggus浏览器。。。可能是哪一个;)它不应该用于post请求,它正在URL中传递参数。在我上面的说明中,我提到您根本不使用ajax来执行下载。我必须在download.php的末尾添加readfile('path/to file.jpg'),否则我的文件总是空的
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 ");
<?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 ");
function download(filename){
    window.location="http://whateveryoursiteis.com/download.php?file="+filename;
}