forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			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();
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |