jQuery,Codeigniter和DOMPDF:Anchor工作但不是AJAX

时间:2011-02-26 00:13:47

标签: codeigniter jquery dompdf

我有以下锚标记,按下后,成功调用控制器(main)中的函数(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 library在锚标记调用或从URI浏览控制器/函数时按预期工作并创建文件“somefilename.pdf”,如下所示:

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
});

如果我在my_pdf函数中注释掉pdf_create调用,我确认AJAX调用将echo字符串返回到预期的值。问题是,当我使用AJAX调用main / my_pdf时,不会创建pdf。事实上,似乎pdf_create返回一长串代码,可能应该用于渲染pdf。 AJAX成功消息返回以下字符串:

  

%PDF-1.3 1 0 obj&lt;&lt; /类型/目录/概述2 0 R /页3 0 R / OpenAction 8 0 R&gt;&gt; endobj 2 0 obj&lt;&lt; /类型/轮廓/计数0&gt;&gt; endobj 3 0 obj&lt;&lt; / Type / Pages / Kids [6 0 R] / Count 1 / Resources&lt;&lt; / ProcSet 4 0 R / Font&lt;&lt; / F1 9 0 R&gt; &GT;&GT; / MediaBox [0.000 0.000 612.000 792.000]&gt;&gt; endobj 4 0 obj [/ PDF / Text] endobj 5 0 obj&lt;&lt; / Creator(DOMPDF)/ CreationDate(D:20110225190447-05'00')/ ModDate(D:20110225190447-05'00')&gt;&gt; endobj 6 0 obj&lt;&lt; /类型/页面/父母3 0 R /内容7 0 R&gt;&gt; endobj 7 0 obj&lt;&lt; /长度73&gt;&gt;流0.000 0.000 0.000 rg BT 34.016 723.208 Td / F1 12.0 Tf [(测试)

我愿意接受任何建议。

1 个答案:

答案 0 :(得分:0)

根据您的理解,您希望您的ajax调用显示“您的PDF已创建”。在#notice元素中,并在后台生成pdf。

你现在正在做的问题是,my_pdf()实际上回应了生成的PDF文件的内容,这是%PDF-1.3 1 ...字符串的来源。如果(并且我相信你是)你没有this dom_pdf helper,你需要将第三个参数设置为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;
});