2012-03-08 15 views
7

मैं एक एपीएक्स कॉल कर रहा हूं जो बाइनरी डेटा देता है। मैं सोच रहा हूं कि क्या उस बाइनरी डेटा को लेना संभव है और इसे क्लाइंट के लिए एक नई विंडो में प्रदर्शित करना संभव है? यह वही है जो मैं अभी कर रहा हूं। समस्या यह है कि दस्तावेज़ खुलता है, लेकिन यह पूरी तरह खाली है।फ़ाइल के माध्यम से बाइनरी डेटा डाउनलोड करें जावास्क्रिप्ट

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

इसका क्रोम एक्सटेंशन देखें, इसलिए मुझे आईई के बारे में चिंता करने की ज़रूरत नहीं है। – 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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^