学会重构:完整的使用XMLHttpRequest加载文档的例子
/* *url-loading object and a request queue built on top of it *//* namespacing object */var Darkness = new Object();Darkness.READY_STATE_UNINITIALIZED=0;Darkness.READY_STATE_LOADING=1;Darkness.READY_STATE_LOADED=2;Darkness.READY_STATE_INTERACTIVE=3;Darkness.READY_STATE_COMPLETE=4;/*--- content loader object for cross-browser requests ---*/Darkness.ContentLoader = function(url,onload,onerror,method,params,contentType){ //this.url = url; this.req=null; this.onload = onload; this.onerror=(onerror) ? onerror : this.defaultError; this.loadXMLDoc(url,method,params,contentType);}Darkness.ContentLoader.prototype = { initXMLHTTPRequest:function(){ if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } return null; }, onReadyState: function(){ var req = this.req; var ready = req.readyState; if (ready == Darkness.READY_STATE_COMPLETE){ var httpStatus = req.status; if (httpStatus==200 || httpStatus==0){ this.onload.call(this); }else{ this.onerror.call(this); } } }, loadXMLDoc: function(url,method,params,contentType){ method = method ||"GET"; if (!contentType && method=="POST"){ contentType='application/x-www-form-urlencoded'; } this.req = this.initXMLHTTPRequest(); if (this.req){ try{ var loader = this; this.req.onreadystatechange = function(){ loader.onReadyState.call(loader); } this.req.open(method,url,true); if (contentType){ this.req.setRequestHeader('Content-Type', contentType); } this.req.send(params); }catch (err){ this.onerror.call(this); } } }, defaultError:function(){ alert("error fetching data!" +"\n\nreadyState:"+this.req.readyState +"\nstatus: "+this.req.status +"\nheaders: "+this.req.getAllResponseHeaders()); }}接着来看一下重构后页面中的代码,优点自己领悟哦:
完整的使用XMLHttpRequest加载文档的例子-Refactor