diff --git a/WebContent/js/cah.ajax.js b/WebContent/js/cah.ajax.js index f70e8eb..902bd33 100644 --- a/WebContent/js/cah.ajax.js +++ b/WebContent/js/cah.ajax.js @@ -8,25 +8,36 @@ cah.ajax = {}; cah.ajax.ErrorHandlers = {}; cah.ajax.SuccessHandlers = {}; -// TODO run a timer to see if we have more than X pending requests and delay further ones until -// we get results -cah.ajax.pendingRequests = {}; - -cah.ajax.serial = 0; +/** + * Create a new cah ajax helper. + * + * @returns {cah.ajax.lib} + * @constructor + */ +cah.ajax.lib = function() { + // TODO run a timer to see if we have more than X pending requests and delay further ones until + // we get results + this.pendingRequests = {}; + this.serial = 0; +}; $(document).ready(function() { + /** + * Singleton instance for ajax utility. + * + * @type {cah.ajax.lib} + */ + cah.Ajax = new cah.ajax.lib(); $.ajaxSetup({ cache : false, - error : cah.ajax.error, - success : cah.ajax.done, + context : cah.Ajax, + error : cah.Ajax.error, + success : cah.Ajax.done, timeout : cah.DEBUG ? undefined : 10 * 1000, // 10 second timeout for normal requests // timeout : 1, // 10 second timeout for normal requests type : 'POST', url : '/cah/AjaxServlet' }); - - // see if we already exist on the server so we can resume - cah.ajax.request("firstload", {}); }); /** @@ -42,48 +53,48 @@ $(document).ready(function() { * @param {?function(jqXHR,textStatus,errorThrown)} * [opt_errback] Optional error callback. */ -cah.ajax.request = function(op, data, opt_errback) { +cah.ajax.lib.prototype.request = function(op, data, opt_errback) { data.op = op; - data.serial = cah.ajax.serial++; + data.serial = this.serial++; var jqXHR = $.ajax({ data : data }); - cah.ajax.pendingRequests[data.serial] = data; + this.pendingRequests[data.serial] = data; cah.log.debug("ajax req", data); if (opt_errback) { jqXHR.fail(opt_errback); } }; -cah.ajax.error = function(jqXHR, textStatus, errorThrown) { +cah.ajax.lib.prototype.error = function(jqXHR, textStatus, errorThrown) { // TODO deal with this somehow // and figure out which request it was so we can remove it from pending debugger; cah.log.error(textStatus); }; -cah.ajax.done = function(data) { +cah.ajax.lib.prototype.done = function(data) { cah.log.debug("ajax done", data); if (data['error']) { // TODO cancel any timers or whatever we may have, and disable interface - var req = cah.ajax.pendingRequests[data.serial]; + var req = this.pendingRequests[data.serial]; if (req && cah.ajax.ErrorHandlers[req.op]) { cah.ajax.ErrorHandlers[req.op](data); } else { cah.log.error(data.error_message); } } else { - var req = cah.ajax.pendingRequests[data.serial]; + var req = this.pendingRequests[data.serial]; if (req && cah.ajax.SuccessHandlers[req.op]) { cah.ajax.SuccessHandlers[req.op](data); } else if (req) { cah.log.error("Unhandled response for op " + req.op); } else { - cah.log.error("Unknown response for serial " + data.serial); + cah.log.error("Response for unknown serial " + data.serial); } } - if (data.serial >= 0 && cah.ajax.pendingRequests[data.serial]) { - delete cah.ajax.pendingRequests[data.serial]; + if (data.serial >= 0 && this.pendingRequests[data.serial]) { + delete this.pendingRequests[data.serial]; } };