XHRLoader.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.XHRLoader = function ( manager ) {
  5. this.cache = new THREE.Cache();
  6. this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
  7. };
  8. THREE.XHRLoader.prototype = {
  9. constructor: THREE.XHRLoader,
  10. load: function ( url, onLoad, onProgress, onError ) {
  11. var scope = this;
  12. var cached = scope.cache.get( url );
  13. if ( cached !== undefined ) {
  14. if ( onLoad ) onLoad( cached );
  15. return;
  16. }
  17. var request = new XMLHttpRequest();
  18. request.open( 'GET', url, true );
  19. request.addEventListener( 'load', function ( event ) {
  20. scope.cache.add( url, this.response );
  21. if ( onLoad ) onLoad( this.response );
  22. scope.manager.itemEnd( url );
  23. }, false );
  24. if ( onProgress !== undefined ) {
  25. request.addEventListener( 'progress', function ( event ) {
  26. onProgress( event );
  27. }, false );
  28. }
  29. if ( onError !== undefined ) {
  30. request.addEventListener( 'error', function ( event ) {
  31. onError( event );
  32. }, false );
  33. }
  34. if ( this.crossOrigin !== undefined ) request.crossOrigin = this.crossOrigin;
  35. if ( this.responseType !== undefined ) request.responseType = this.responseType;
  36. request.send( null );
  37. scope.manager.itemStart( url );
  38. },
  39. setResponseType: function ( value ) {
  40. this.responseType = value;
  41. },
  42. setCrossOrigin: function ( value ) {
  43. this.crossOrigin = value;
  44. }
  45. };