2012-03-08 20 views
7

İkili veriyi döndüren bir API'ye ajax çağrısı yapıyorum. Bu ikili veriyi alıp istemciye yeni bir pencerede göstermenin mümkün olup olmadığını merak ediyorum. Şu an yaptığım şey bu. Sorun şu ki, belge açılıyor ama tamamen boş.İkili Veri ile Dosya Olarak İkili Veri İndirme

$.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); 
    } 
}); 

Herhangi bir fikir?

+0

HTTPS kullanıyorsunuz IE ile: Ben 'dizisi tampon' olarak responseType belirtmek zorunda? Eğer öyleyse, bkz http://stackoverflow.com/questions/773308/ie-https-generating-pdf-from-php-file-doesnt-work –

+0

Onun bir krom uzantısı, bu yüzden IE hakkında endişelenmenize gerek yok. – Anton

+0

Sunucu tarafı uygulamasının kontrolü sizde var mı? –

cevap

7

Tamam, anladım.

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

Bu yöntemi kullanarak indirilen dosya adını nasıl değiştirirsiniz? FileSaver kullanarak – Greg

+1

bunu daha kolay hale getirecek http://stackoverflow.com/questions/15211742/html5-saveas-support-in-google-chrome – davyzhang

İlgili konular