XMLHttpRequest
की वर्ण एन्कोडिंग something that won't change the binary data करने के लिए सेट किया गया है, या आपने set the response type, आप तो .responseText
btoa
(बेस 64 में डालने और इसकी सूचना देने के एक डेटा यूआरआई के रूप में निर्दिष्ट) के माध्यम से चला सकते हैं या क्रमशः बाइनरी डेटा के लिए .response
एक्सेस करें।
अपने उदाहरण मानते हुए xhr
नाम पर है और आप xhr.send
से पहले चारसेट विधि का उपयोग कर रहे हैं, लेकिन xhr.open
के बाद
xhr.overrideMimeType("text/plain; charset=x-user-defined");
कर फिर जब आप कर रहे हैं 200 OK
var dataURI = 'data:image/jpeg;base64,' + btoa(xhr.responseText);
कौन सा आप कर सकते हैं फिर <img>
के src के रूप में सेट करें।
फिर xhr
संभालने, इस बार .response
विधि; तब से .open
और .send
के बीच,
xhr.responseType = "arraybuffer";
200 OK
var arrayBufferView = new Uint8Array(xhr.response), // can choose 8, 16 or 32 depending on how you save your images
blob = new Blob([arrayBufferView], {'type': 'image\/jpeg'}),
objectURL = window.URL.createObjectURL(blob);
जो तुम तो एक <img>
के src के रूप में सेट कर सकते हैं। Example
स्रोत
2012-12-10 20:04:10
इसे एक इनलाइन छवि कहा जाता है। ध्यान दें कि IE8 केवल इनलाइन छवियों का समर्थन करता है जो 32 KB से कम हैं (बेस 64 एन्कोडेड डेटा के लिए, इसलिए स्रोत छवि को 24 KB से कम होना होगा), और आईई 7 और इससे पहले इनलाइन छवियों का समर्थन नहीं करते हैं (यदि यह मायने रखता है)। –
ने कोशिश की, लेकिन 'btoa (xhr.responseText)' वापस लौटता रहता है 'त्रुटि: INVALID_CHARACTER_ERR: DOM अपवाद 5'। मुझे नहीं पता कि ऐसा क्यों होता है। आईई 7/आईई 8 के लिए ... मुझे इसके साथ निपटने के लिए एक फ्लैश ऑब्जेक्ट बनाना होगा – Marc
@Marc ऐसा होता है क्योंकि 'btoa' में कुछ [बग] हैं (https://bugzilla.mozilla.org/show_bug.cgi? आईडी = 213047) (समान/समान वेबकिट पर भी लागू होता है), मैं _ArrayBuffer_ -> 'Blob' -> _URL.createObjectURL_ विधि के माध्यम से उत्तर अपडेट करूंगा, जो मेरी राय में _FileReader_ के माध्यम से थोड़ा बेहतर है लेकिन अभी भी उतना अच्छा नहीं है _btoa_ के रूप में। –