【问题标题】:jQuery, Codeigniter and DOMPDF: Anchor works but not AJAXjQuery、Codeigniter 和 DOMPDF:Anchor 有效但 AJAX 无效
【发布时间】:2011-07-04 16:36:19
【问题描述】:

我有以下锚标记,当按下它时,成功调用控制器 (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 调用会按预期返回回显字符串。问题是当我使用 AJAX 调用 main/my_pdf 时,没有创建 pdf。事实上,pdf_create 似乎返回了一长串代码,很可能应该用于呈现 pdf。 AJAX 成功消息返回以下字符串:

%PDF-1.3 1 0 obj > endobj 2 0 obj > endobj 3 0 obj > >> /MediaBox [0.000 0.000 612.000 792.000] >> endobj 4 0 obj [/PDF /Text] endobj 5 0 obj > endobj 6 0 obj > endobj 7 0 obj > stream 0.000 0.000 0.000 rg BT 34.016 723.208 Td /F1 12.0 Tf [(测试)

我愿意接受任何建议。

【问题讨论】:

  • %PDF-1.3 ... 的东西是原始 PDF 数据。当您使用&lt;a&gt; 元素访问main/my_pdf 时,浏览器会执行GET 请求;但是,您的 AJAX 调用正在执行 POST 请求; pdf_create 对 POST 请求有什么不同吗?

标签: codeigniter jquery dompdf


【解决方案1】:

据您了解,您希望 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;
});

【讨论】:

  • 完美——非常感谢!我肯定学到了一些新东西!
  • 感谢您的建议!我做了你建议的更改,我仍然返回原始 pdf 文本字符串,而不是生成 pdf 文件。以前的 cmets 之一是 锚方法发出 GET 请求,而我首选的 AJAX 方法发出 POST 请求。再次感谢任何其他建议!
  • AFAIK $.load() 发出 GET 请求,所以我认为这不是问题所在。问题更可能在于您从控制器调用pdf_create 的方式。在浏览器中打开main/my_pdf,并确保屏幕上除了“您的 PDF 已创建”之外没有显示任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2015-09-14
  • 1970-01-01
  • 2020-11-21
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多