2012-05-16 28 views
6

Mam łącze i kiedy użytkownik go kliknie, otrzymuje plik PDF. W jQuery tworzę wywołanie POST ajax na serwer, aby uzyskać plik PDF. Odpowiedzią jest plik PDF z poprawnymi nagłówkami treści itp., Który normalnie spowoduje, że przeglądarka otworzy wtyczkę Reader lub pozwoli użytkownikowi zapisać plik PDF. Ale w moim przypadku to nie działa. Czy jest jakiś sposób, aby ustawić typ treści danych lub ustawić typ zawartości na PDF?Ajax jQuery: odpowiedź pdf

Moje ajax połączeń:

$('#sf_getpdf').click(function() { 

$.ajax({ //create an ajax request to load_page.php 

     type: "POST", 

     url: "index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>", 

     data: 'invoice_id=<?php echo $invoice_id; ?>&sf_token=<?php echo $sf_token ?>', //with the page number as a parameter 

     dataType: "text", //expect html to be returned 


     success: function(msg){ 



      if(parseInt(msg)!=0) //if no errors 

      { 

      document.write(msg) 
      } 

     } 

    }); 

}); 

Firebug, odpowiedź: Firebug

Response w przeglądarce ...

response in browser

Próbowałem już ustawić typ zawartości w serwerze , bez powodzenia:

content-type in server

Edytuj: Ajax nie jest potrzebny, aby to zrobić.

<a id="adr_stitok" target="_blank" href="index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>&invoice_id=<?php echo $invoice_id; ?>&sf_token=<?php echo $sf_token ?>" >Download</a></td> 

Zrobię to.

+1

document.write() nie jest przeznaczone do pracy w taki sposób. Lepiej jest, wysyłając użytkownika na nową stronę. – Corbin

+0

Ahhh, jestem głupi. Download Nie potrzebuję ajax, aby to zrobić. :) – Adrian

+2

Dlaczego po prostu nie hiperłącza linku pdf? lub złożyć wniosek pocztą za pośrednictwem formularza? – John

Odpowiedz

5

Upewnij się, że po stronie serwera zwraca downloadeable treści i uczynić złożyć do akt, coś jak:

  //$.download('path', 'data' [, 'post']) 
      $.download = function(url, data, method) { 
       //url and data options required 
       if(url && data) { 
        var form = $('<form />', { action: url, method: (method || 'get') }); 
        $.each(data, function(key, value) { 
         var input = $('<input />', { 
          type: 'hidden', 
          name: key, 
          value: value 
         }).appendTo(form); 
        }); 
       return form.appendTo('body').submit().remove(); 
       } 
      throw new Error('$.download(url, data) - url or data invalid'); 
      }; 

$.download("index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>", {}, 'post') 
0

Nie zadziała, ponieważ wywołania AJAX NIE pobierają pliku PDF i nie ładują go do przeglądarki. To dlatego nazywa się XMLHttpRequest .. tylko wymienia tylko tekst!