118 lines
2.2 KiB
JavaScript
118 lines
2.2 KiB
JavaScript
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;
|
|
}
|