export { GET, POST }; function GET(url, data, cb) { var options = {}; if (typeof url == 'object') { options = url; url = options.url; } var r = create_request_object(); url = url + (url.indexOf('?') >= 0 ? '&' : '?') + http_build_query(data); r.open('GET', url); set_request_callback(r, cb, options); r.send(); return r; } function POST(url, data, cb) { var options = {}; if (typeof url == 'object') { options = url; url = options.url; } var r = create_request_object(); r.open('POST', url); set_request_callback(r, cb, options); if (typeof data != 'string' && (!window.FormData || !(data instanceof FormData))) { r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); data = http_build_query(data); } r.send(data); return r; } function create_request_object() { if (typeof XMLHttpRequest === 'undefined') { XMLHttpRequest = function() { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} throw new Error("This browser does not support XMLHttpRequest."); }; } return new XMLHttpRequest(); } function set_request_callback(r, cb, options) { if (options.timeout) r.timeout = options.timeout; if (options.headers) for (var k in options.headers) r.setRequestHeader(k, options.headers[k]); r.onreadystatechange = function() { if (r.readyState == 4) { var d; if (r.getResponseHeader('Content-Type').indexOf('/json') > 0) { d = json_decode(r.responseText); } cb(r, d); } }; } function build_array_query(data, prefix) { var s = '', k; for (var i in data) { k = prefix ? prefix+'['+encodeURIComponent(i)+']' : encodeURIComponent(i); if (typeof data[i] == 'object' && data[i] !== null) s += build_array_query(data[i], k); else s = s+'&'+k+'='+(data[i] === false || data[i] === null || data[i] === undefined ? '' : encodeURIComponent(data[i])); } return s; } function http_build_query(data) { return build_array_query(data).substr(1); } function json_decode(text) { if (!text) { return null; } try { if (window.JSON) { return JSON.parse(text); } return eval(text); } catch(e) { if (window.console) { console.log(e); } } return null; }