-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
34 lines (22 loc) · 803 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module.exports = jsonAjax;
function jsonAjax(url, data, callback, fallback){
if (typeof(data) === 'function'){
callback = data;
data = undefined;
}
const request = new XMLHttpRequest();
request.open(data ? 'POST' : 'GET', url, true);
if (data) request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.onload = () => {
const response = tryParse(request.responseText);
if (request.status >= 200 && request.status < 400) return callback(null, response);
callback({ response, status: request.status });
};
request.onerror = fallback || console.error.bind(console);
request.send(JSON.stringify(data));
}
function tryParse(resp){
// return response, parse it in case it's encoded json
try { return JSON.parse(resp); }
catch(err) { return resp; }
}