XMLHttpRequest per aprire PDF nel browser

Voglio fare XMLHttpRequest e quindi aprire un PDF nel Browser inviando il nome del file tramite il metodo POST.

xmlhttp.open("POST","pdf.php",true); //CHANGE xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("file="+input); 

È ansible o XMLHttpRequest è solo per HTML?

  1. Non è ansible farlo tramite XMLHttpRequest se l’URL che stai interrogando restituisce effettivamente i dati PDF.

    Perché? Perché la risposta è una risposta HTTP che contiene dati PDF grezzi. Non è ansible abilitare JavaScript per sostituire i contenuti DOM del documento corrente con un rendering di un PDF contenuto in tali dati, anche se si ha accesso ai dati tramite l’attributo responseText `(vedere anche http://www.w3.org/TR / XMLHttpRequest / # the-responsetext-attribute ).

  2. Quello che puoi fare è generare un file PDF in un file temporaneo accessibile tramite un URL dal tuo server web, e poi fare in modo che lo script restituisca l’URL per accedere a quel file.

    Quando il gestore della risposta elabora l’URL, può:

    • window.location.href = new_pdf_url pagina corrente cambiando window.location.href = new_pdf_url

    • Caricarlo in un all’interno del documento corrente modificando l’attributo src di iframe

    • Aprilo in una finestra separata da window.open(new_pdf_url, XXX)

      Nota che hai ANCORA bisogno di un URL in un percorso di file temporaneo per aprire una nuova finestra

Se stai aprendo il PDF nella stessa finestra non ha senso usare XmlHttpRequest, basta impostare window.location ( window.location.assign("http://example.com/location/file.pdf") , window.location.href="http://etc ) dal tuo javascript, invece di invocare XmlHttpRequest. (se hai ricevuto i byte PDF da XmlHttpRequest come farai a convincere il browser a visualizzarlo comunque con PdfPluginX?)

Se vuoi il PDF in una nuova finestra del browser usa window.open(...) direttamente dal tuo javascript.

Puoi provare questo:

  var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { var file = window.URL.createObjectURL(xmlHttp.response); var a = document.createElement("a"); a.href = file; window.open(file); } } xmlHttp.open("GET", '/pdf', true); // true for asynchronous xmlHttp.responseType= "blob"; xmlHttp.send(null);