/** * @author mrdoob / http://mrdoob.com/ */ THREE.XHRLoader = function ( manager ) { this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; }; THREE.XHRLoader.prototype = { constructor: THREE.XHRLoader, load: function ( url, onLoad, onProgress, onError ) { if ( this.path !== undefined ) url = this.path + url; var scope = this; var cached = THREE.Cache.get( url ); if ( cached !== undefined ) { if ( onLoad ) { setTimeout( function () { onLoad( cached ); }, 0 ); } return cached; } var request = new XMLHttpRequest(); request.open( 'GET', url, true ); request.addEventListener( 'load', function ( event ) { var response = event.target.response; THREE.Cache.add( url, response ); if ( this.status == 200 && this.readyState == 4 ) { if ( onLoad ) onLoad( response ); } else { if ( onError ) onError( event ); } scope.manager.itemEnd( url ); }, false ); if ( onProgress !== undefined ) { request.addEventListener( 'progress', function ( event ) { onProgress( event ); }, false ); } request.addEventListener( 'error', function ( event ) { if ( onError ) onError( event ); scope.manager.itemError( url ); }, false ); if ( this.crossOrigin !== undefined ) request.crossOrigin = this.crossOrigin; if ( this.responseType !== undefined ) request.responseType = this.responseType; if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; request.send( null ); scope.manager.itemStart( url ); return request; }, setCrossOrigin: function ( value ) { this.crossOrigin = value; }, setResponseType: function ( value ) { this.responseType = value; }, setPath: function ( value ) { this.path = value; }, setWithCredentials: function ( value ) { this.withCredentials = value; } };