2011-02-26 67 views
0

我有以下錨點標籤,當按下時,成功調用控制器(主)內的函數(my_pdf)。jQuery,Codeigniter和DOMPDF:錨點工作,但不是AJAX

<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工程和創建文件「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 < < /類型/目錄/大綱2 0 R /頁3 0 R/OpenAction 8 0 R >> endobj 2 0 OBJ < < /類型/輪廓/計數0 >> endobj 3 0 obj < < /類型/ Pages/Kids [6 0 R]/Count 1/Resources < </ProcSet 4 0 R/Font < </F1 9 0 R >> >>/MediaBox [0.000 0.000 612.000 792.000] >> endobj 4 0 obj [/ PDF/Text] endobj 5 0 obj < </Creator(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 [(測試)

我願意接受任何建議。

回答

0

從您的理解中,您希望您的ajax調用顯示「您的PDF已創建」。在#notice元素中,並在後臺生成pdf。

現在你在做什麼的問題是,my_pdf()實際上回顯了生成的PDF文件的內容,這是%PDF-1.3 1 ...字符串的來源。如果(我相信你)你unsing 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; 
}); 
+0

完美 - 非常感謝!我絕對學到了一些新東西! – Gunnar 2011-02-26 17:45:23

+0

謝謝你的建議!我提出了您的建議更改,我仍然返回原始的PDF文本字符串,而不是生成PDF文件。之前的評論之一是,錨點方法發出GET請求,而我的首選AJAX方法發出POST請求。再次,我欣賞任何其他建議! – Gunnar 2011-02-26 18:18:32

+0

AFAIK $ .load()發出GET請求,所以我認爲這不是問題。這個問題更可能是你從你的控制器調用pdf_create的方式。在您的瀏覽器中打開「main/my_pdf」,並確保除「您的PDF已創建」外,屏幕上不顯示任何內容。 – jfoucher 2011-02-27 11:21:28