@@ -60,19 +60,24 @@ var SpotifyWebApi = (function () {
6060 for ( var key in parameters ) {
6161 if ( parameters . hasOwnProperty ( key ) ) {
6262 var value = parameters [ key ] ;
63- qs += encodeURIComponent ( key ) + '=' + encodeURIComponent ( value ) + '&' ;
63+ if ( qs . length > 0 ) {
64+ qs += '&' ;
65+ }
66+ qs += encodeURIComponent ( key ) + '=' + encodeURIComponent ( value ) ;
6467 }
6568 }
6669 if ( qs . length > 0 ) {
6770 // chop off last '&'
68- qs = qs . substring ( 0 , qs . length - 1 ) ;
6971 url = url + '?' + qs ;
7072 }
7173 return url ;
7274 } ;
7375
7476 var _performRequest = function ( requestData , callback ) {
75- var req = new XMLHttpRequest ( ) ;
77+ var req = new Request ( _buildUrl ( requestData . url , requestData . params ) ) ;
78+ var headers = { } ;
79+ var cancelled = false ;
80+ var body = null ;
7681
7782 var promiseFunction = function ( resolve , reject ) {
7883 function success ( data ) {
@@ -85,6 +90,10 @@ var SpotifyWebApi = (function () {
8590 }
8691
8792 function failure ( ) {
93+ var info = {
94+ request : req ,
95+ body : body
96+ } ;
8897 if ( reject ) {
8998 reject ( req ) ;
9099 }
@@ -94,51 +103,51 @@ var SpotifyWebApi = (function () {
94103 }
95104
96105 var type = requestData . type || 'GET' ;
97- req . open ( type , _buildUrl ( requestData . url , requestData . params ) ) ;
106+ req . method = type ;
98107 if ( _accessToken ) {
99- req . setRequestHeader ( ' Authorization' , 'Bearer ' + _accessToken ) ;
108+ headers . Authorization = 'Bearer ' + _accessToken ;
100109 }
101110
102- req . onreadystatechange = function ( ) {
103- if ( req . readyState === 4 ) {
104- var data = null ;
105- try {
106- data = req . responseText ? JSON . parse ( req . responseText ) : '' ;
107- } catch ( e ) {
108- console . error ( e ) ;
109- }
110-
111- if ( req . status >= 200 && req . status < 300 ) {
112- success ( data ) ;
113- } else {
114- failure ( ) ;
115- }
116- }
117- } ;
118-
119- if ( type === 'GET' ) {
120- req . send ( null ) ;
121- } else {
111+ if ( type !== 'GET' ) {
122112 var postData = null ;
123113 if ( requestData . postData ) {
124114 if ( requestData . contentType === 'image/jpeg' ) {
125115 postData = requestData . postData ;
126- req . setRequestHeader ( 'Content-Type' , requestData . contentType ) ;
116+ headers [ 'Content-Type' ] = requestData . contentType ;
127117 } else {
128118 postData = JSON . stringify ( requestData . postData ) ;
129- req . setRequestHeader ( 'Content-Type' , 'application/json' ) ;
119+ headers [ 'Content-Type' ] = 'application/json' ;
130120 }
131121 }
132- req . send ( postData ) ;
122+ req . body = postData ;
133123 }
124+
125+ req . loadText ( ) . then ( ( res ) => {
126+ if ( cancelled ) {
127+ return ;
128+ }
129+ body = res ;
130+ var data = null ;
131+ try {
132+ data = res ? JSON . parse ( res ) : '' ;
133+ } catch ( e ) {
134+ console . error ( e ) ;
135+ }
136+
137+ if ( req . response . statusCode >= 200 && req . response . statusCode < 300 ) {
138+ success ( data ) ;
139+ } else {
140+ failure ( ) ;
141+ }
142+ } ) ;
134143 } ;
135144
136145 if ( callback ) {
137146 promiseFunction ( ) ;
138147 return null ;
139148 } else {
140149 return _promiseProvider ( promiseFunction , function ( ) {
141- req . abort ( ) ;
150+ cancelled = true ;
142151 } ) ;
143152 }
144153 } ;
0 commit comments