jQuery, Codeigniter и DOMPDF: Anchor работает, но не AJAX - PullRequest
0 голосов
/ 26 февраля 2011

У меня есть следующий тег привязки, который при нажатии успешно вызывает функцию (my_pdf) внутри контроллера (основной).

<a href="main/my_pdf">Press Me</a>

Вот функция в главном контроллере:

    function my_pdf()
{
    $this->load->helper('dompdf');
    $this->load->helper('file');
    $html = "<p>Testing</p>";
    pdf_create($html, 'somefilename');

    echo "Your PDF has been created.";
}

Библиотека DOMPDF работает и создает файл "somefilename.pdf", как и ожидалось, когда он вызывается тегом привязки или при переходе к контроллеру / функции из URI следующим образом:

http://localhost/main/my_pdf

Однако вместо привязки мне нужно вызывать эту функцию из запроса jQuery AJAX. Вот HTML:

<div id="pdf"><img src="assets/images/pdf-icon.gif" /></div>
<div id="notice"></div>

и поддержка jQuery:

    $('#pdf').click(function(){
    $.ajax({
        url: 'main/my_pdf',
        type: 'POST',
        success: function(msg) {
            $('#notice').html(msg);
        }
    });
    return false;//toggled this between true/false and still not working
});

Если я закомментирую вызов pdf_create в функции my_pdf, я подтвердил, что вызов AJAX возвращает строку эха в ожидаемом порядке. Проблема в том, что когда я использую AJAX для вызова main / my_pdf, pdf не создается. Фактически, кажется, что pdf_create возвращает длинную строку кода, которая, вероятно, должна использоваться для визуализации pdf. Сообщение об успешном выполнении AJAX возвращает следующую строку:

% PDF-1.3 1 0 obj << / Тип / Каталог / Контуры 2 0 R / Pages 3 0 R / OpenAction 8 0 R >> endobj 2 0 obj << / Тип / Контуры / Количество 0 >> endobj 3 0 obj << / Тип / Страницы / Дети [6 0 R] / Количество 1 / Ресурсы << / ProcSet 4 0 R / Шрифт << / F1 9 0 R >> >> / MediaBox [0.000 0.000 612.000 792.000] >> endobj 4 0 obj [/ PDF / Text] endobj 5 0 obj << / Создатель (DOMPDF) / CreationDate (D: 20110225190447-05'00 ') / ModDate (D: 20110225190447-05'00') >> endobj 6 0 obj << / Тип / Страница / Родительский 3 0 R / Содержание 7 0 R >> endobj 7 0 obj << / Длина 73 >> Поток 0,000 0,000 0,000 rg BT 34.016 723.208 Td / F1 12.0 Tf [(Тестирование)

Я открыт для любых предложений.

1 Ответ

0 голосов
/ 26 февраля 2011

Исходя из того, что вы понимаете, вы хотите, чтобы ваш вызов ajax показывал "Ваш PDF был создан". в элементе #notice и сгенерируйте PDF в фоновом режиме.

Проблема в том, что вы делаете сейчас, заключается в том, что my_pdf () фактически отображает содержимое сгенерированного PDF-файла, откуда берется строка %PDF-1.3 1 .... Если (и я верю, что вы), вы отключаете этот помощник dom_pdf , вам нужно установить третий параметр на pdf_create() на FALSE, чтобы pdf генерировался, но не выводился, как это:

pdf_create($html, 'somefilename',FALSE);

Единственное, что будет отображено: «Ваш PDF был создан.», Который будет правильно отображаться после вашего вызова ajax.

Обратите внимание, что вы можете значительно упростить вызов ajax, просто выполнив:

$('#pdf').click(function(e){
    $('#notice').load('main/my_pdf');
    e.preventDefault();
    return false;
});
...