/* * wrightui Request 1.0 - jQuery Plugin * http://www.localhost * Copyright © 2010 wrightui, inc * Author: wrightui; Wright, Benjamin * Revision: none */ /** * wrightui Request is an ultra lightweight jQuery plugin that provides a helper * functions for managing an extremely dynamic UI/Server interaction * * The purpose of wrightui Request is to extend jQuery's existing $.ajax functionality * so that timeout requests can be handled gracefully when server * processing times are unusually long (ie exceeding default browser * settings; > network.http.keep-alive.timeout;115)). * * WARNING! * wrightui Request uses undocumented features of jQuery 1.4.2; No guarantee of * any sort, explicit or implied, is provided by the author or wrightui, Inc for any harm * resulting from the use of this plugin. Use at your own risk! * * Requires * jquery-1.4.2.js * * wrightui Request has been tested in the following browsers: * - IE 8 * - Firefox 3 */ ;(function ($) { $.wrightui = { requests: {}, //empty object for storing requests abortRequest: function(myXHR, properties) { try { var requestName = properties.requestName.toString(); if (this.requests[requestName] != undefined) { this.debugMessage("request aborted for: "+requestName); this.requests[requestName][1].success = function() { //Aborted requests trigger success method in jQuery (FF); Overwrite it to do nothing } this.requests[requestName][0].abort(); //request management (Native) delete this.requests[requestName]; //memory management } } catch (E) { this.debugMessage("abortRequest Error: "+E); } }, deleteCompletedRequest: function(myXHR) { this.debugMessage('deleteCompletedRequest'); try { for (o in this.requests) { if (this.requests[o][0] === myXHR) { delete this.requests[o]; } } } catch (E) { this.debugMessage("deleteCompletedRequest Error: "+E); } }, pollRequests: function() { this.debugMessage("Polling Requests...."); try { var count = 0; for (o in this.requests) { //HOW DO WE KNOW TO SPAWN A REQUEST AGAIN? if (this.requests[o][0].readyState == 0) { this.submitRequest(this.requests[o][1]); } else { this.debugMessage("Polling: skipped "+this.requests[o][1].requestName); } count ++; } } catch (E) { this.debugMessage("pollRequests Error: "+E); } }, submitRequest: function(properties) { try { $.ajax(properties); //simply resubmit a request } catch (E) { this.debugMessage("wrightui.submitRequest Error: "+E); } }, queRequest: function (myXHR, properties) { try { var requestName = properties.requestName.toString(); this.requests[requestName] = [myXHR, properties]; } catch (E) { this.debugMessage("wrightui.queRequest Error: "+E); } }, //Write either to the console, or alerts debugMessage: function(message) { /* if (window.console != undefined) { console.log(message); //Firebug is not ready in FF by the time a button might have been clicked } else { alert(message); } */ }, id: '1.0.20100527' }; //Start polling 10 seconds after page load; Polling Requests Every 5 seconds //(10-second initial lag time) setTimeout('setInterval('$.wrightui.pollRequests()', 10000)', 5000); })(jQuery);

