Trying to download “Hello world” using JS and PHP

2019-07-30 01:59发布

问题:

I'm trying to download a pdf when i click a link.

These are my codes:

function issue_bill(order_id){
$.post('orders/issueBilll?id_order='+order_id,
        order_id,
        function()
        {
          $('example').replaceWith('Bill issued');
        }
      );
}


public function executeIssueBill(sfWebRequest $request)
{
  $pdf=new FPDF();
  $pdf->AddPage();
  $pdf->SetFont('Arial','B',16);
  $pdf->Cell(40,10,'Hello World!');
  $pdf->Output();
}  

When i click on the link, it doesn't download the pdf document. If i go the inspector of Firebug i get this below in the "Response" section of the Console:

%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 72>>
stream
x�3R��2�35W(�r
Q�w3T04�30PISp
    �Z*�[����(hx����+���(j*�d��
endstream
endobj
1 0 obj
<</Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.28 841.89]
>>
endobj
5 0 obj
<</Type /Font
/BaseFont /Helvetica-Bold
/Subtype /Type1
/Encoding /WinAnsiEncoding
>>
endobj
2 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
/F1 5 0 R
>>
/XObject <<
>>
>>
endobj
6 0 obj
<<
/Producer (FPDF 1.53)
/CreationDate (D:20110126103602)
>>
endobj
7 0 obj
<<
/Type /Catalog
/Pages 1 0 R
/OpenAction [3 0 R /FitH null]
/PageLayout /OneColumn
>>
endobj
xref
0 8
0000000000 65535 f 
0000000228 00000 n 
0000000416 00000 n 
0000000009 00000 n 
0000000087 00000 n 
0000000315 00000 n 
0000000520 00000 n 
0000000596 00000 n 
trailer
<<
/Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
699
%%EOF

What should i do to download the document? I don't have any problem to download the pdf if i call directly issueBill() method.

回答1:

You don't want to make an AJAX request, where the response is stored in a JavaScript variable, you want to make a normal HTTP request -- the kind made when someone clicks a link or types a URL in the browser address bar.

Send the user to the URL of your PDF generator with window.location in JavaScript.

If you want to try to trick the browser into staying on your page while it does it, make the request by creating an iframe pointing to the URL of your PDF generator. You'll also have to fudge the content-type header to NOT tell the browser it's a PDF, otherwise it might attempt to display it in the window instead of forcing a download.