// trivial remote scripting library // based on sajax: // http://www.modernmethod.com/sajax/ // (c) copyright 2005 modernmethod, inc tajax = {} tajax.debug_mode = false; // true / false tajax.request_type = "GET"; // GET / POST tajax.failure_redirect = "/error.xml"; tajax.result_id = ""; tajax.debug = function(text) { if (tajax.debug_mode) alert(text); } tajax.error = function(text) { if (tajax.debug_mode) alert("Error: " + text); } tajax.failure = function(text) { alert("Failure: " + text); } tajax.init_object = function() { tajax.debug("tajax.init_object() called..") var A; var msxmlhttp = new Array( 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'); for (var i = 0; i < msxmlhttp.length; i++) { try { A = new ActiveXObject(msxmlhttp[i]); } catch (e) { A = null; } } if(!A && typeof XMLHttpRequest != "undefined") A = new XMLHttpRequest(); if (!A) tajax.error("Could not create connection object."); return A; } tajax.requests = new Array(); tajax.cancel = function() { for (var i = 0; i < tajax.requests.length; i++) { if (tajax.requests[i]) { tajax.requests[i].abort(); } } } tajax.retrieve = function(uri, callback, extra_data, post_data) { var i, x, n; tajax.debug("in tajax.retrieve().." + tajax.request_type + "/" + tajax.target_id); if (typeof(tajax.request_type) == "undefined" || tajax.request_type == "") tajax.request_type = "GET"; if (tajax.request_type == "GET") { post_data = null; } else if (tajax.request_type == "POST") { // ignore } else { tajax.error("Illegal request type: " + tajax.request_type); } x = tajax.init_object(); if (x == null) { if (tajax.failure_redirect != "") { location.href = tajax.failure_redirect; return false; } else { tajax.error("NULL tajax object for user agent:\n" + navigator.userAgent); return false; } } else { x.open(tajax.request_type, uri, true); // window.open(uri); tajax.requests[tajax.requests.length] = x; if (tajax.request_type == "POST") { x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1"); x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } x['xyz'] = 1; x.onreadystatechange = function() { if (! x['xyz']) { tajax.error("bad this object"); } if (x.readyState != 4) return; tajax.debug("received " + x.responseText); var status; var data; var txt = x.responseText.replace(/^\s*|\s*$/g,""); status = txt.charAt(0); data = x.responseText; if (status == "") { // let's just assume this is a pre-response bailout and let it slide for now } else if (status == "-") tajax.failure(data); else { try { callback(data, extra_data); } catch (e) { tajax.error("Caught exception during callback: " + e + ": Could not eval " + data ); } } for (var i = 0; i < tajax.requests.length; i++) { if (tajax.requests[i] == x) { delete tajax.requests[i]; } } } } tajax.debug("uri = " + uri + "/post = " + post_data); x.send(post_data); tajax.debug("waiting.."); delete x; return true; } tajax.assembleArguments = function(args) { uri = ""; if (args) { for (var key in args) { var val = args[key]; uri += escape(key) + "=" + escape(val); } } return uri; } tajax.constructURI = function(baseURI, args) { var uri = baseURI; if (tajax.request_type == "GET") { if (uri.indexOf("?") == -1) uri += "?"; uri += tajax.assembleArguments(args); } else if (tajax.request_type == "POST") { // do nothing } else { tajax.failure("Illegal request type: " + tajax.request_type); } return uri; } tajax.constructPOST = function(args) { var post = ""; if (tajax.request_type == "GET") { // do nothing } else if (tajax.request_type == "POST") { post = tajax.assembleArguments(args); } else { tajax.failure("Illegal request type: " + tajax.request_type); } return post; } /** * void createUpdate(String uri, String callbackName) * * Creates a function for a controller object to handle the retrive / callback * setup. The function will require an optional "args" parameter, which is * expected to be a hashtable. * * This is the primary entry method everyone will use. * * @param uri the base URI for the call. * @param callbackName name of the function (must be static) to call back. * It will take as arguments (resultData, controller). */ tajax.createUpdate = function(uri, callbackName) { var nuri = "'" + uri.replace(/'/,"\\'") + "'"; return eval('function(args) {' + //'tajax.debug("creating call with uri " + nuri + ", this.number = " + this.number);' + 'var uri = tajax.constructURI(' + nuri + ', args);' + 'var post = tajax.constructPOST(args);' + 'tajax.retrieve(uri, ' + callbackName + ', this, post);' + '}'); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#3 | 5925 | Matt Albrecht | Updates to the server status page | ||
#2 | 5816 | Matt Albrecht | Add / update the server status with a much better AJAX model. | ||
#1 | 5810 | Matt Albrecht |
New version of logDaemon that has better bug fixes. Also added server-status web page for a pure client-side AJAX app that pulls together different server-side statistics. |