2012-03-08 4 views
7

바이너리 데이터를 반환하는 API에 대해 ajax 호출을 만들고 있습니다. 바이너리 데이터를 가져와 새 창에서 클라이언트에 표시 할 수 있는지 궁금합니다. 이것은 내가 지금하고있는 일이다. 문제는 문서가 열리지 만 완전히 비어있는 것입니다.바이너리 데이터를 자바 스크립트 파일로 다운로드

$.ajax({ 
    type: "POST", 
    url: apiURL, 
    data: xmlRequest, 
    complete: function(xhr, status) { 
     var bb = new window.WebKitBlobBuilder(); 

     // Append the binary data to the blob 
     bb.append(xhr.responseText); 

     var blobURL = window.webkitURL.createObjectURL(bb.getBlob('application/pdf')); 
     window.open(blobURL); 
    } 
}); 

아이디어가 있으십니까?

+0

IE에서 HTTPS를 사용하고 있습니까? 그렇다면 http://stackoverflow.com/questions/773308/ie-https-generating-pdf-from-php-file-doesnt-work –

+0

크롬 확장이므로 Internet Explorer에 대해 걱정할 필요가 없습니다. – Anton

+0

서버 측 구현을 제어 할 수 있습니까? –

답변

7

좋아요, 알아 냈습니다. 응답 유형을 '배열 버퍼'로 지정해야했습니다.

function downloadPDF() { 

    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', API_URL, true); 
    xhr.responseType = 'arraybuffer'; 

    xhr.onload = function(e) { 
     if (this.status == 200) { 
      var bb = new window.WebKitBlobBuilder(); 
      bb.append(this.response); // Note: not xhr.responseText 

      var blob = bb.getBlob('application/pdf'); 
      var blobURL = window.webkitURL.createObjectURL(blob); 

      window.open(blobURL); 
     } 
    }; 

    xhr.send(createRequest()); 
} 
+0

이 방법을 사용하여 다운로드 한 파일 이름을 어떻게 변경합니까? FileSaver를 사용하여 – Greg

+1

을 사용하면 더 쉽게 만들 수 있습니다. http://stackoverflow.com/questions/15211742/html5-saveas-support-in-google-chrome – davyzhang

관련 문제