@@ -60,19 +60,24 @@ var SpotifyWebApi = (function () {
60
60
for ( var key in parameters ) {
61
61
if ( parameters . hasOwnProperty ( key ) ) {
62
62
var value = parameters [ key ] ;
63
- qs += encodeURIComponent ( key ) + '=' + encodeURIComponent ( value ) + '&' ;
63
+ if ( qs . length > 0 ) {
64
+ qs += '&' ;
65
+ }
66
+ qs += encodeURIComponent ( key ) + '=' + encodeURIComponent ( value ) ;
64
67
}
65
68
}
66
69
if ( qs . length > 0 ) {
67
70
// chop off last '&'
68
- qs = qs . substring ( 0 , qs . length - 1 ) ;
69
71
url = url + '?' + qs ;
70
72
}
71
73
return url ;
72
74
} ;
73
75
74
76
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 ;
76
81
77
82
var promiseFunction = function ( resolve , reject ) {
78
83
function success ( data ) {
@@ -85,6 +90,10 @@ var SpotifyWebApi = (function () {
85
90
}
86
91
87
92
function failure ( ) {
93
+ var info = {
94
+ request : req ,
95
+ body : body
96
+ } ;
88
97
if ( reject ) {
89
98
reject ( req ) ;
90
99
}
@@ -94,51 +103,51 @@ var SpotifyWebApi = (function () {
94
103
}
95
104
96
105
var type = requestData . type || 'GET' ;
97
- req . open ( type , _buildUrl ( requestData . url , requestData . params ) ) ;
106
+ req . method = type ;
98
107
if ( _accessToken ) {
99
- req . setRequestHeader ( ' Authorization' , 'Bearer ' + _accessToken ) ;
108
+ headers . Authorization = 'Bearer ' + _accessToken ;
100
109
}
101
110
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' ) {
122
112
var postData = null ;
123
113
if ( requestData . postData ) {
124
114
if ( requestData . contentType === 'image/jpeg' ) {
125
115
postData = requestData . postData ;
126
- req . setRequestHeader ( 'Content-Type' , requestData . contentType ) ;
116
+ headers [ 'Content-Type' ] = requestData . contentType ;
127
117
} else {
128
118
postData = JSON . stringify ( requestData . postData ) ;
129
- req . setRequestHeader ( 'Content-Type' , 'application/json' ) ;
119
+ headers [ 'Content-Type' ] = 'application/json' ;
130
120
}
131
121
}
132
- req . send ( postData ) ;
122
+ req . body = postData ;
133
123
}
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
+ } ) ;
134
143
} ;
135
144
136
145
if ( callback ) {
137
146
promiseFunction ( ) ;
138
147
return null ;
139
148
} else {
140
149
return _promiseProvider ( promiseFunction , function ( ) {
141
- req . abort ( ) ;
150
+ cancelled = true ;
142
151
} ) ;
143
152
}
144
153
} ;
0 commit comments