Skip to content

Commit 24e0523

Browse files
committed
convert to use Scriptable Request
1 parent ee8c9d2 commit 24e0523

File tree

1 file changed

+38
-29
lines changed

1 file changed

+38
-29
lines changed

src/spotify-web-api.js

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)