2012-05-16 26 views
6

Tengo un enlace y cuando el usuario hace clic en él, obtiene un PDF. En jQuery, creo una llamada POST ajax al servidor para obtener el PDF. La respuesta es un PDF, con encabezados de contenido correctos, etc. que normalmente provocarían que el navegador abra el complemento de Reader o que el usuario guarde el PDF. Pero en mi caso, esto no está funcionando. ¿Hay alguna forma de establecer el tipo de contenido de datos o establecer el tipo de contenido en PDF?jQuery Ajax: respuesta en pdf

Mi llamada AJAX:

$('#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, la respuesta: Firebug

de respuesta en el navegador ...

response in browser

ya traté de configurar el tipo de contenido en el servidor Sin éxito:

content-type in server

Editar: El Ajax no es necesario, para hacer esto.

<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> 

va a hacer la cosa.

+1

document.write() no está destinado a ser utilizado por el estilo. Es mejor que solo envíe al usuario a una nueva página. – Corbin

+0

Ahhh, soy estúpido. Download No necesito ajax para hacer esto. :) – Adrian

+2

¿Por qué no simplemente hipervínculo al enlace pdf? o hacer una post solicitud a través del formulario? – John

Respuesta

5

Asegúrese de que su servidor devuelve un contenido downloadeable y crea una someten al archivo, algo así como:

  //$.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

No funcionará porque las llamadas AJAX NO recogen PDF y lo cargan dentro del navegador. Es por eso que se llama XMLHttpRequest ... ¡solo intercambia texto!

Cuestiones relacionadas