2012-05-02 2 views
4

Я хочу загрузить файл в формате pdf через почту jquery. Я попытался это:скачать pdf from ajax post

$('#downloadPdf').click(function() { 
    var id = $('#fileId').val(); 

    $.ajax({ 
     type: "POST", 
     url: "includes/download_pdf.php", 
     data: 'file_id=' + id, 
     complete: function(data) { 
      $('#pdf_results').html(data.responseText); 
     } 
    }); 
}); 

код PHP:

<?php 
    $file_name = $_POST['file_id']; 
    // We'll be outputting a PDF header('Content-type: application/pdf'); 
    // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="'.$file_name.'.pdf"'); 
    // The PDF source is in original.pdf readfile('/var/www/vhosts/domain.nl/private/'.$file_name.'.pdf'); 
?> 

Когда я использую этот код я получаю все странные знаки в #pdf_results. Я хочу сохранить PDF на свой компьютер, но это не работает.

Кто-нибудь знает, как это исправить?

Заранее благодарен!

+0

Возможный дубликат [POST на сервер, получение PDF, доставляемый пользователю w/jQuery] (http://stackoverflow.com/questions/2186562/post-to-server-receive-pdf-deliver-to-user- w-jquery) –

+1

вы пытаетесь вывести исходный pdf-файл в формате html. Это не сработает. Вы не можете начать загрузку таким образом. Вы хотите, чтобы пользователь увидел диалоговое окно загрузки или должен отображаться файл pdf в этом элементе html? – Fender

+0

@Fender Я хочу увидеть диалоговое окно загрузки. –

ответ

2

Для этого не нужно использовать AJAX. Попробуйте использовать что-то вроде этого:

$(function(){ 
    $('#downloadPdf').click(function(){ 
     var id = $('#fileId').val(); 
     window.open(location.protocol + '//' + location.hostname + '/includes/download_pdf.php?file_id=' + id); 
     return false; 
    }); 
}); 

Cheers!

+3

Это не запрос POST. – mbarkhau

1

Здесь нет необходимости в ajax.

Попробуйте использовать решение Рори McCrossan в: POST to server, receive PDF, deliver to user w/ jQuery

Либо использовать плагин или просто ссылку на файл и убедитесь, что ваш сервер посылает правильные заголовки (иначе вы можете прочитать файл с PHP и выводить их оттуда: http://www.saschakimmel.com/2009/05/php-prompt-the-user-to-download-a-specific-file/)

1

У невидимой <iframe/> на странице, а также создать <form> с атрибутами method="POST" action="includes/download_pdf.php" target="name_of_the_iframe", добавьте <input type="hidden" name="file_id" value="the_value"/> в нее, и представить его.

Все вышеперечисленное может быть сделано в JavaScript без необходимости нанести такую ​​разметку на страницу, чтобы все было в порядке. И ничто из этого не является ajax.

1

Вы должны достичь этого: я действительно не трассировать вашу программу, но вам нужно содержание распоряжения строку в PHP, чтобы заставить его работать.

<?php 
// We'll be outputting a PDF 
header('Content-type: application/pdf'); 

// It will be called downloaded.pdf 
**header('Content-Disposition: attachment; filename="downloaded.pdf"');** 

// The PDF source is in original.pdf 
readfile('original.pdf'); 
?> 

проверка ручной here

Также вы можете переместить файл на более в IFRAME, но это риск безопасности, следовательно, другая тема.

+0

Хороший ответ, ключ - «привязанность», а для загрузки его с помощью javascript: 'window.location =" includes/download_pdf.php "'; – jscripter

Смежные вопросы