PHP响应字符串作为文件

时间:2016-03-30 09:42:36

标签: php ajax symfony response

在php中创建pdf为字符串,如下所示:

%PDF-1.4
(..skipping...)
/F1 9 Tf
0 g 
BT
157 830 Td
(Lorem ) Tj
ET
(..skipping...)
8 0 obj 
<</Type /Font /Encoding /WinAnsiEncoding /Subtype /Type1 /BaseFont /Helvetica >>
endobj

我的PHP代码:

//string it's pdf as plain text
return new Response($string);

在js中我使用ajax:

$("a#get_pdf").on('click', function(e){
    e.preventDefault();
    $.ajax('/get_pdf/');
});

我如何下载此文件,因为我的回复是纯文本,不喜欢文件。

- - - - - - - - 编辑

我可以这样做,就像在这个答案中一样: https://stackoverflow.com/a/34065784/4900669

-----编辑2 ----

但经过一些搜索,我编辑了我的js代码(https://stackoverflow.com/a/20830337/4900669):

$("a#get_pdf").on('click', function(e){
    e.preventDefault();
    $.ajax({
        url: '/get_pdf/',
        type: 'POST',
        success: function() {
            window.location = '/get_pdf/';
        }
    });
});

它的工作非常完美。

2 个答案:

答案 0 :(得分:1)

首先,我不认为您需要将其设为ajax,只需让浏览器在空白窗口中打开链接。

然后,您需要修改标题以使下载成为可能,参考:Symfony2 - Force file download

这应该足以让它发挥作用!我希望它有所帮助

答案 1 :(得分:0)

明确禁止Javascript写入文件。您无法将Ajax调用与文件下载相结合。

您可以在当前文档中嵌入隐藏的iframe,然后将iframe指向将导致在浏览器中触发下载的内容。 e.g。

$("a#get_pdf").on('click', function(e){
   e.preventDefault();
   document.getElementById('someHiddenDiv').innerHTML="<iframe src='/get_pdf/'></iframe>";
}

但是你需要在包含pdf文件的响应的标题中至少设置mimetype。