var XMLHTTP_UNITIALISED = 0; var XMLHTTP_LOADING = 1; var XMLHTTP_LOADED = 2; var XMLHTTP_INTERACTIVE = 3; var XMLHTTP_COMPLETED = 4; function XMLHttpRequestWrapper(oObject) { var self = this; this.oXMLHttp = oObject; this.bHasBeenInteractive = false; this.oXMLHttp.onreadystatechange = function() { self.handleReadyStatusChange(); }; this.fCallBack = null; } XMLHttpRequestWrapper.prototype.handleReadyStatusChange = function() { if((this.oXMLHttp.readyState === XMLHTTP_INTERACTIVE)) { this.bHasBeenInteractive = true; } if((this.oXMLHttp.readyState === XMLHTTP_COMPLETED)) { if(this.bHasBeenInteractive === true) { this.fCallBack(); } else { alert("request completed but, never went through the correct stages"); } } } function test() { var oDate = new Date(); ajaxRequest("/sandbox/test.php?time=" + oDate.getTime(), test2); } function test2() { alert("test2()"); } function ajaxRequest(sURL, fCallBack) { /* * Author: Chris Miles * Name: ajaxRequest * Purpose: starts a AJAX request. * Params: sURL - String - URL to fetch * fCallBack - Function - address of function to be executed upon completion of request. * Returns: none */ // need a clean way of creating new objects and cleaning them up // possible a global area gaRequests[gaRequests.length] = request; var oXMLHttp = getXMLHttpRequest(); var oXMLHttpWrap = new XMLHttpRequestWrapper(oXMLHttp); if(oXMLHttpWrap.oXMLHttp !== null) { oXMLHttpWrap.fCallBack = fCallBack; oXMLHttpWrap.oXMLHttp.open("GET", sURL, true); oXMLHttpWrap.oXMLHttp.send(null); } } function test3() { var oEvent = window.event; alert("e: " + oEvent); } function getXMLHttpRequest() { /* * Author: Chris Miles * Name: getXMLHttpRequest * Purpose: Gets a XMLHTTP Object for the current browser. * Params: none * Returns: oXMLHttp - Object - XMLHTTP object */ var oXMLHttp = null; if(typeof XMLHttpRequest !== "undefined") { oXMLHttp = new XMLHttpRequest(); } else { try { oXMLHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(oException) { try { oXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(oException) { alert("Error creating oXMLHttp"); } } } return oXMLHttp; }