2011-01-20 6 views
3

XMLHttpRequest를 실행 한 다음 POST 메서드로 파일 이름을 보내서 브라우저에서 PDF를 열고 싶습니다.브라우저에서 PDF를 열려면 XMLHttpRequest를 사용하십시오.

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

XMLHttpRequest는 HTML 용입니까?

+0

당신은 동적으로로드하려는 자바 스크립트와 PDF? – Jonah

+0

예! 어쩌면이 도움이 될 것입니다 : http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit – user583311

답변

5
  1. 쿼리하는 URL이 실제로 PDF 데이터를 반환하는 경우 XMLHttpRequest를 통해 수행 할 수 없습니다.

    왜? 응답은 원시 PDF 데이터가 포함 된 HTTP 응답이기 때문입니다. responseText` 속성 (또한 http://www.w3.org/TR/XMLHttpRequest/#the-responsetext-attribute 참조)을 통해 데이터에 액세스 할 수 있음에도 불구하고 현재 문서의 DOM 내용을 해당 데이터에 포함 된 PDF 렌더링과 바꾸는 JavaScript 기능은 없습니다.

  2. 당신이 할 수있는 일은 웹 서버의 URL을 통해 액세스 할 수있는 임시 파일에 PDF 파일을 생성 한 다음 스크립트에서 해당 파일에 액세스하기위한 URL을 다시 보내도록하는 것입니다.

    응답 핸들러가 URL을 처리 할 때 다음 중 하나를 수행 할 수 있습니다

    • 변경은 iframe의 src하여 현재 문서 내부 <iframe>window.location.href = new_pdf_url

    • 로드를 변경하여 현재 페이지를 다시로드 속성

    • 별도의 창에서 열기 window.open(new_pdf_url, XXX)

      당신은 시도 할 수 있습니다 당신은 여전히 ​​새 창을

+0

하지만 새 창에서 열 수 있습니까? – user583311

+0

@ user583311 - URL이 임시 PDF 파일을 가리키는 경우에만 새 창을 열 수 있습니다. 기본적으로 비 HTML 컨텐트에서 "DOM 문서"를 생성하는 기본 JavaScript 메커니즘은 없습니다. 브라우저는 해당 내용을 렌더링하기 위해 플러그인을 가질 수 있지만 브라우저의 문서가 처음부터 다시로드되지 않는 한 해당 플러그인을 강제로 실행할 수는 없습니다. 'window.open ('pdf.php? file ='+ input, XXX)'을 사용하면 어떨까요? – DVK

+0

자바 스크립트로 숨겨진 양식을 제출해보십시오. – user583311

0

동일한 창에서 PDF를 여는 경우 XmlHttpRequest를 사용하지 않아도됩니다. XmlHttpRequest를 호출하는 대신 javacript에서 window.location (window.location.assign("http://example.com/location/file.pdf"), window.location.href="http://etc)을 설정하면됩니다. (당신이 XMLHttpRequest의에서 PDF 바이트를받은 경우 어떻게 어쨌든 PdfPluginX로 표시 할 브라우저를 설득하려고?)

당신이 새로운 브라우저 창에 PDF 단지에서 직접 window.open(...)를 사용하려는 경우 너의 자바 스크립트.

+0

Dropbox에서 PDF의 위치를 ​​공개하고 싶지 않습니다. POST 값을 받고 PDF를 보여주는 pdf.php가 있습니다. 난 그냥 자바 스크립트에 의해 pdf.php에 POST를 보내 기다릴 필요가있다. – user583311

-1

를 열고 임시 파일 위치에 URL이 필요하다는 것을 유의하시기 바랍니다이 하나

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); 
관련 문제