使用JQuery AJAX和PHP

时间:2015-12-16 03:14:43

标签: php jquery ajax pdf download

我已在SO中找到关于主题的many questions here,但其中任何一个都可以帮助我解决具体问题。

我需要向PHP发送ajax请求,然后下载PDF文件。

这是我的Javascript

$('body').on("click",'.download-file', function(e) {
        e.stopPropagation();
        var id = $(this).attr('data-id');
            $.ajax({
                url: 'app/myPage/download',// The framework will redirect it to index.php and then to myPage.class and method dowload
                data: id,
                type: 'POST',
                success: function (return) {
                   console.log(return);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                   console.log("Error... " + textStatus + "        " + errorThrown);
                }
            });
    });

这是我的PHP文件:

class myPage{
    public function download()
       {
            $id = $_POST['id'];
            $filePath = $this->methodToGetFile($id);
            $name = end(explode('/',$filePath));
            $fp = fopen($filePath, 'rb');
            header("Cache-Control: ");
            header("Pragma: ");
            header("Content-Type: application/octet-stream");
            header("Content-Length: " . filesize($filePath));
            header("Content-Disposition: attachment; filename='".$name."';");
            header("Content-Transfer-Encoding: binary\n");
            fpassthru($fp);
            exit;
    }
}

通过这种方法,我得到了PDF" print"在控制台中

%PDF-1.5%����1 0 obj<</Type/Catalog/Pages 2 0 R/Lang(pt-BR) /StructTreeRoot 8 0 R/MarkInfo<</Marked true>>>> ...

所以,我想知道如何打开此文件并下载它。

在关联的问题中,我看到了window.location的一些问题,但我不知道如何使用它。

我已经尝试更改PHP标头以尝试强制下载,但没有成功。在这些情况下,我只是在javascript中收到null没有任何反应。以下是修改后的标题:

    header('Content-Type: application/pdf');//tried with this option
    //header('Content-Type: application/octet-stream');// also tried with this other option
    header('Content-Disposition: attachment; filename=' . $name);
    header('Content-Transfer-Encoding: binary');
    header('Connection: Keep-Alive');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filePath));

有没有一些好方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为这种下载pdf的方法无效。 Javascript正在发送请求,而php正在发送响应。您希望响应直接转到浏览器,而不是javascript。您应该更改下载链接以直接转到下载位置。不需要ajax / javascript。像这样:

<a href="javascript:void(0)" onclick = "window.href='app/myPage/download?'+id">download</a>