/** * HTML文件内容获取对象(新版),用于获取远程链接的HTML内容 */ //该对象把需要获取的HTML链接储存到一个数组中,一个一个获取,获取完一个后执行相应的操作函数再去获取下一个 function XHConn2() { var xh = false; try { xh = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xh = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { try { xh = new XMLHttpRequest(); } catch (e) { xh = false; }}} if (!xh) return null; this.xmlhttp = xh; this.jobs = []; this.jobIndex = -1; this.ready = true; return this; } //为了保持XHConn2对象的唯一性,请使用getXHConn2()函数获得该对象 var xhConn2_instance = null; function getXHConn2(){ if(xhConn2_instance == null) xhConn2_instance = new XHConn2(); return xhConn2_instance; } //链接获取作业对象 //其中fnDone是操作函数,形式是fnDone(xmlHttp){} function XHConnJob(fnDone, sURL, sEncoding, sMethod, sVars){ this.doneFunction = fnDone; this.url = sURL; this.encoding = sEncoding; this.method = sMethod; this.vars = sVars; this.connection = null; //point to a XHConn object if(!this.method || this.method.toUpperCase() != "POST"){ this.method = "GET"; } return this; } //增加一个链接获取作业 XHConn2.prototype.addJob = function(fnDone, sURL, sEncoding, sMethod, sVars){ if (!this.xmlhttp) return false; if(this.jobIndex >= this.jobs.length){ this.jobs = []; this.jobIndex = -1; } var job = new XHConnJob(fnDone, sURL, sEncoding, sMethod, sVars); job.connection = this; this.jobs[this.jobs.length] = job; return true; }; //开始获取 XHConn2.prototype.start = function(){ if(!this.ready) return false; //running if(!this.xmlhttp) return false; if(this.jobs.length == 0) return false; //no job if(this.jobIndex >= this.jobs.length) return false; //jobs done var xh = this.xmlhttp; this.jobIndex++; var job = this.jobs[this.jobIndex]; if(!job || !job.url || job.url == ""){ this.ready = true; this.start(); //next job return false; } this.ready = false; //start tag try{ xh.open(job.method, job.url, true); if (!job.encoding){ xh.setRequestHeader("Content-Type", "text/xml"); }else{ xh.setRequestHeader("Content-Type", "text/xml; charset=" + job.encoding); } xh.onreadystatechange = function(){ if (xh.readyState == 4){ job.doneFunction(xh); job.connection.ready = true; //job done, change the state tag job.connection.start(); } }; //todo: job.vars xh.send(job.vars); } catch(z) { job.doneFunction(null); this.ready = true; this.start(); return false; } return true; }