52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
/*! https://www.henryalgus.com/reading-binary-files-using-jquery-ajax/ */
|
|
/**
|
|
*
|
|
* jquery.binarytransport.js
|
|
*
|
|
* @description. jQuery ajax transport for making binary data type requests.
|
|
* @version 1.0
|
|
* @author Henry Algus <henryalgus@gmail.com>
|
|
*
|
|
*/
|
|
|
|
// use this transport for "binary" data type
|
|
$.ajaxTransport("+binary", function(options, originalOptions, jqXHR){
|
|
// check for conditions and support for blob / arraybuffer response type
|
|
if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) {
|
|
return {
|
|
// create new XMLHttpRequest
|
|
send: function(headers, callback){
|
|
// setup all variables
|
|
var xhr = new XMLHttpRequest(),
|
|
url = options.url,
|
|
type = options.type,
|
|
async = options.async || true,
|
|
// blob or arraybuffer. Default is blob
|
|
dataType = options.responseType || "blob",
|
|
data = options.data || null,
|
|
username = options.username || null,
|
|
password = options.password || null;
|
|
|
|
xhr.addEventListener('load', function(){
|
|
var data = {};
|
|
data[options.dataType] = xhr.response;
|
|
// make callback and send data
|
|
callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders());
|
|
});
|
|
|
|
xhr.open(type, url, async, username, password);
|
|
|
|
// setup custom headers
|
|
for (var i in headers) {
|
|
xhr.setRequestHeader(i, headers[i]);
|
|
}
|
|
|
|
xhr.responseType = dataType;
|
|
xhr.send(data);
|
|
},
|
|
abort: function(){
|
|
jqXHR.abort();
|
|
}
|
|
};
|
|
}
|
|
}); |