使用 Jquery、PHP 下载 Ajax 文件

2022-08-30 18:06:03

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

我有一些PHP脚本来处理$_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]."');
}

请浏览我的代码,帮助我找到我做错了什么。

感恩节


答案 1

我认为问题是你试图将文件结果加载到#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 ");

希望这有帮助!


答案 2

我知道我迟到了!但我认为我有一个解决方案,它不使用隐藏的iframe,甚至不需要ajax请求来做到这一点!使用 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 ");

在JS端,简单地

function download(filename){
    window.location="http://whateveryoursiteis.com/download.php?file="+filename;
}

像吊饰一样工作:O


推荐