XMLHttpRequest для открытия PDF в браузере - PullRequest
3 голосов
/ 20 января 2011

Я хочу сделать XMLHttpRequest, а затем открыть PDF в браузере, отправив имя файла методом POST.

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

Возможно ли это или XMLHttpRequest предназначен только для HTML?

Ответы [ 3 ]

5 голосов
/ 20 января 2011
  1. Это невозможно сделать с помощью XMLHttpRequest, если запрашиваемый URL-адрес действительно возвращает данные PDF.

    Почему? Поскольку ответ является ответом HTTP, который содержит необработанные данные PDF. В JavaScript нет возможности заменить содержимое DOM текущего документа на рендеринг PDF-файла, содержащегося в этих данных, даже если у вас есть доступ к данным через атрибут responseText `(см. Также * 1008). *

    Что вы МОЖЕТЕ сделать, так это сгенерировать PDF-файл во временный файл, доступный через URL-адрес с вашего веб-сервера, а затем заставить скрипт отправить обратно URL-адрес для доступа к этому файлу.

    Когда ваш обработчик ответа обрабатывает URL, он может:

    • Перезагрузите текущую страницу, изменив window.location.href = new_pdf_url

    • Загрузите его в <iframe> внутри текущего документа, изменив атрибут src iframe

    • Откройте его в отдельном окне по window.open(new_pdf_url, XXX)

      Обратите внимание, что вам по-прежнему нужен URL для временного местоположения файла, чтобы открыть новое окно

0 голосов
/ 23 ноября 2015

Вы можете попробовать это:

    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);
0 голосов
/ 20 января 2011

Если вы открываете PDF в том же окне, нет смысла использовать XmlHttpRequest, просто установите window.location (window.location.assign("http://example.com/location/file.pdf"), window.location.href="http://etc) из вашего javascript вместо вызова XmlHttpRequest.(если вы получили байты PDF из XmlHttpRequest, как вы собираетесь убедить браузер отображать его с помощью PdfPluginX?)

Если вы хотите использовать PDF в новом окне браузерапросто используйте window.open(...) прямо из вашего JavaScript.

...