2012-03-08 79 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

相关问题