2011-02-26 2 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"를 생성/URI와 기능은 다음과 같이 대신 앵커의

http://localhost/main/my_pdf 

을, 그러나, 나는 jQuery를 AJAX 요청에서이 함수를 호출 할 필요가있다.

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

및 jQuery를 지원 : 나는 my_pdf 함수에서 pdf_create 호출을 주석 경우

$('#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 
}); 

, 내가 AJAX 호출이 예상대로에 에코 문자열을 반환 확인 다음은 HTML입니다. 문제는 AJAX를 사용하여 main/my_pdf를 호출하면 pdf가 작성되지 않는다는 것입니다. 사실, pdf_create는 pdf를 렌더링하는 데 사용될 것으로 예상되는 코드의 긴 문자열을 반환합니다. 아약스 성공 메시지는 다음과 같은 문자열을 반환

퍼센트의 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 < </유형/페이지/키즈 [6 0 R]/개수 1/리소스 < </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 < </작성자 (DOMPDF)/CreationDate (D : 20110225190447-05'00 ')/ModDate (D : 20110225190447-05 '00') >> endobj 6 0 obj </타입/페이지/상위 3 0 R/내용량 R >> 7 0 7 0 endobj OBJ < </길이 73 >> 스트림 0.000 0.000 0.000의 RG BT 34.016 723.208 TD/F1 Tf를 12.0 [(시험)

나는 어떤 제안이든 열려 있습니다.

답변

0

아약스 전화에 "귀하의 PDF가 생성되었습니다"라는 메시지가 표시되기를 바랍니다. #notice 요소에 있으며 백그라운드에서 생성 된 pdf가 있습니다.

지금 당신이 겪고있는 문제는 실제로 %PDF-1.3 1 ... 문자열이 나온 곳인 my_pdf()가 생성 된 PDF 파일의 내용을 실제로 반향한다는 것입니다. 그 것이다

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

유일한 것은 : 당신이 this dom_pdf helper을 unsing된다 (그리고 나는 당신이 생각)하면 PDF 파일을 생성하지만,이 같은 밖으로 반향되지 않도록 당신은 FALSEpdf_create() 세 번째 매개 변수를 설정해야합니다 "귀하의 PDF가 생성되었습니다."라는 메시지가 나타나면 AJAX 호출 후 올바르게 표시됩니다.당신은 매우 간단하게 수행하여 아약스 전화를 단순화 할 수 있음을 또한

주 : %는 PDF-1.3 ...`물건 원시 PDF 데이터입니다

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

완벽하고 - 정말 고마워요! 나는 확실히 새로운 것을 배웠다! – Gunnar

+0

제안 해 주셔서 감사합니다. 나는 당신의 제안 된 변경을했고 여전히 pdf 파일을 생성하는 대신 원시 pdf 텍스트 문자열을 반환하고 있습니다. 이전 의견 중 하나는 앵커 접근 방식이 GET 요청을하는 반면 선호하는 AJAX 접근 방식은 POST 요청을하는 것입니다. 다시 한 번, 나는 어떤 추가 제안을 주셔서 감사합니다! – Gunnar

+0

AFAIK $ .load()는 GET 요청을합니다. 그래서 여기에 문제가 있다고 생각하지 않습니다. 이 문제는 컨트롤러에서'pdf_create'를 호출하는 방법에 더 많은 가능성이 있습니다. 브라우저에서'main/my_pdf' 파일을 열고 "PDF가 생성되었습니다"와 별도로 화면에 아무것도 표시되지 않도록하십시오. – jfoucher

관련 문제