113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
var HTTPReq = new Object;
|
|
|
|
HTTPReq.create = function () {
|
|
var xtr;
|
|
var ex;
|
|
|
|
if (typeof(XMLHttpRequest) != "undefined") {
|
|
xtr = new XMLHttpRequest();
|
|
} else {
|
|
try {
|
|
xtr = new ActiveXObject("Msxml2.XMLHTTP.4.0");
|
|
} catch (ex) {
|
|
try {
|
|
xtr = new ActiveXObject("Msxml2.XMLHTTP");
|
|
} catch (ex) {
|
|
}
|
|
}
|
|
}
|
|
|
|
// let me explain this. Opera 8 does XMLHttpRequest, but not setRequestHeader.
|
|
// no problem, we thought: we'll test for setRequestHeader and if it's not present
|
|
// then fall back to the old behavior (treat it as not working). BUT --- IE6 won't
|
|
// let you even test for setRequestHeader without throwing an exception (you need
|
|
// to call .open on the .xtr first or something)
|
|
try {
|
|
if (xtr && ! xtr.setRequestHeader)
|
|
xtr = null;
|
|
} catch (ex) { }
|
|
|
|
return xtr;
|
|
};
|
|
|
|
// opts:
|
|
// url, onError, onData, method (GET or POST), data
|
|
// url: where to get/post to
|
|
// onError: callback on error
|
|
// onData: callback on data received
|
|
// method: HTTP method, GET by default
|
|
// data: what to send to the server (urlencoded)
|
|
HTTPReq.getJSON = function (opts) {
|
|
var req = HTTPReq.create();
|
|
if (! req) {
|
|
if (opts.onError) opts.onError("noxmlhttprequest");
|
|
return;
|
|
}
|
|
|
|
var state_callback = function () {
|
|
if (req.readyState != 4) return;
|
|
|
|
if (req.status != 200) {
|
|
if (opts.onError) opts.onError(req.status ? "status: " + req.status : "no data");
|
|
return;
|
|
}
|
|
|
|
var resObj;
|
|
var e;
|
|
try {
|
|
eval("resObj = " + req.responseText + ";");
|
|
} catch (e) {
|
|
}
|
|
|
|
if (e || ! resObj) {
|
|
if (opts.onError)
|
|
opts.onError("Error parsing response: \"" + req.responseText + "\"");
|
|
|
|
return;
|
|
}
|
|
|
|
if (opts.onData)
|
|
opts.onData(resObj);
|
|
};
|
|
|
|
req.onreadystatechange = state_callback;
|
|
|
|
var method = opts.method || "GET";
|
|
var data = opts.data || null;
|
|
|
|
var url = opts.url;
|
|
if (opts.method == "GET" && opts.data) {
|
|
url += url.match(/\?/) ? "&" : "?";
|
|
url += opts.data
|
|
}
|
|
|
|
url += url.match(/\?/) ? "&" : "?";
|
|
url += "_rand=" + Math.random();
|
|
|
|
req.open(method, url, true);
|
|
|
|
// we should send null unless we're in a POST
|
|
var to_send = null;
|
|
|
|
if (method.toUpperCase() == "POST") {
|
|
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
|
to_send = data;
|
|
}
|
|
|
|
req.send(to_send);
|
|
};
|
|
|
|
HTTPReq.formEncoded = function (vars) {
|
|
var enc = [];
|
|
var e;
|
|
for (var key in vars) {
|
|
try {
|
|
if (!vars.hasOwnProperty(key))
|
|
continue;
|
|
enc.push(encodeURIComponent(key) + "=" + encodeURIComponent(vars[key]));
|
|
} catch( e ) {}
|
|
}
|
|
return enc.join("&");
|
|
|
|
};
|
|
|