使用AJAX无法正常下载文件

时间:2015-09-25 05:57:01

标签: php jquery ajax

我正在使用PHP中的AJAX创建简单的文件下载脚本。我的脚本无效。表示在点击后在下载链接下显示pdf / doc文件的内容。下图将说明问题。

enter image description here



以下是我的代码

AJAX和HTML

$(function() {
$(".download_link").click(function() {       
    var test = $("#content").val();
    var dataString = 'content='+ test;          
    $.ajax({
        type: "POST",
        url: "download_file.php",
        data: dataString,
        cache: false,
        success: function(html){            
        $("#display").after(html);
        document.getElementById('content').value='';            
    }
});
return true;
});
});

<a href="#" class="download_link" id="d_link">

PHP脚本:(download_file.php)

<?php     
ob_start();
$file = 'file.doc';
header("location:".$file);    
?>

3 个答案:

答案 0 :(得分:2)

您正在使用$("#display").after(html);这就是为什么它显示文件的内容。您可以按照以下代码下载该文件。

$(function() {
$(".download_link").click(function() {       
    var test = $("#content").val();
    var dataString = 'content='+ test;          
    $.ajax({
        type: "POST",
        url: "download_file.php",
        data: dataString,
        cache: false,
        success: function(html){            
            window.location = 'your_file.pdf';
    }
});
return true;
});
});

答案 1 :(得分:0)

我认为你的方法不正确。

使用您的脚本,您尝试将 file.doc 内容附加到DOM对象中 - &gt;浏览器不知道AJAX请求如何管理文档的编码,它将无法正常工作。

对于下载文档我不会使用AJAX,我认为如果你只是用文档的url打开一个新窗口并让borwser管理内容的响应就没问题了:

window.open("download_file.php");

如果您只想在同一页面中显示文档内容,我会按如下方式使用iframe:

<form action="download_file.php" method="GET" target="docIframe">
    <input type="submit" value="Download"/>
</form>

<iframe name="docIframe" width="600px" height="500px"/>

答案 2 :(得分:-1)

You need to set header content type to tell the browser how it renders the content for PDF or DOC.
<?php
   //Set header for pdf
    header("Content-type:application/pdf");
    header("Content-Disposition:attachment;filename='file_to_download.pdf'");
    readfile("original.pdf");
?>