Ajax实战上的ContentLoader对象 JScript code var net = new Object();//名字空间对象 net.READY_STATE_UNINITIALIZED = 0; net.READY_STATE_LOADING = 1; net.READY_STATE_LOADED = 2; net.READY_STATE_INTERACTIVE = 3; net.READY_STATE_COMPLETE = 4; net.ContentLoader = function(url, onload, onerror){ ///构造函数 this.url = url; this.req = null; this.onload = onload; this.onerror = (onerror) ? onerror : this.defaultError; this.loadXMLDoc(url); } net.ContentLoader.prototype = { loadXMLDoc : function(url){重新命名的 if(window.XMLHttpRequest) { this.req = new XMLHttpRequest(); } else if(window.ActiveXObject) { this.req = new ActiveXObject("Microsoft.XMLHTTP"); } if(this.req) { try { var loader = this; this.req.onreadystatechange = function(){ loader.onReadyState.call(loader); } //重构过的sendRequest函数 this.req.open("GET", url, true); this.req.send(null); } catch(err) { this.onerror.call(this); } } }, //重构过的回调函数 onReadyState : function(){ var req = this.req; var ready = req.readystate; if(ready == net.READY_STATE_COMPLETE) { var httpStatus = req.status; if(httpStatus == 200 || httpStatus ==0) { this.onload.call(this); } else { this.onerror.call(this); } } }, defaultError : function(){ alert("error fetching data!" + "/n/nreadyState:" + this.req.readyState + "/nStatus:" + this.req.status + "/nheaders:" + this.req.getAllResponseHeaders()); } }