Ajax File Download using Jquery, PHP

后端 未结 2 1645
我在风中等你
我在风中等你 2020-11-27 03:28

I want to use the ajax functionality to download whereby the user will click the download link which will (using ajax and $_GET) access a PHP file which will process the sen

相关标签:
2条回答
  • 2020-11-27 03:46

    I know I'm late! But I think I have a solution that's a little cleaner without the use of a hidden iframe and you won't even need an ajax request to do it! Using PHP Headers as noted in the accepted answer in a download.php file

    <?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 ");
    

    And on the JS end, simply

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

    Works like a charm :O

    0 讨论(0)
  • I think the problem is that you're trying to load a file result INTO #downloadmsg, which isn't going to work because .load() is only going to load results as HTML...NOT binary data or other encoding.

    One approach that might work is creating a hidden iframe in HTML, like this:

    <iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>
    

    Then, set the attr of the iframe to your querystring:

    $("#secretIFrame").attr("src","myphpscript.php?option1=apple&option2=orange");
    

    and then using PHP headers to force the download when the source is set (here's an example of an exporter header set from one of my scripts that uses an octet stream):

    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 ");
    

    Hope this helps!

    0 讨论(0)
提交回复
热议问题