2012-03-08 89 views
7

我正在對返回二進制數據的API進行ajax調用。我想知道是否有可能採取這種二進制數據並在新窗口中顯示給客戶端?這就是我現在正在做的。問題是,文檔打開了,但它完全空白。通過Javascript將二進制數據作爲文件下載

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

是否使用HTTPS與IE瀏覽器?如果是這樣,請參閱http://stackoverflow.com/questions/773308/ie-https-generating-pdf-from-php-file-doesnt-work – 2012-03-08 15:50:45

+0

它的Chrome擴展,所以我不必擔心IE。 – Anton 2012-03-08 16:09:57

+0

你有控制服務器端的實現嗎? – 2012-03-08 16:41:05

回答

7

好吧,我想通了。我不得不指定的responseType爲「數組緩衝區」:

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

如何使用此方法更改下載的文件名? – Greg 2012-09-23 21:40:14

+1

使用FileSaver將使這更簡單http://stackoverflow.com/questions/15211742/html5-saveas-support-in-google-chrome – davyzhang 2015-03-21 10:03:23

相關問題