实现XMLHttpRequest对象池的大体思路是:建立一个缓存数组用来存放已经创建好的XMLHttpRequest对象,遇到用户请求需要创建XMLHttpRequest对象时,则先看缓存数组中是否已经有XMLHttpRequest对象空闲,如果有则直接从缓存中取一个试用;如果没有则重新创建一个.
var Try={ these:function(){ var returnValue; for(var i=0,length=arguments.length;i<length;i++){ var lambda=arguments[i]; try{ //如果创建成功,则终止 returnValue=lambda(); break; }catch(e){} } return returnValue; } }; var Ajax={ getTransport:function(){ //创建一个xmlhttp,直到成功为止 return Try.these( function(){return new XMLHttpRequest()}, function(){return new ActiveXObject('Msxml2.XMLHTTP')}, function(){return new XMLHttpRequest('Microsoft.XMLHTTP')} )||false; } }; var XMLHttp={ _xmlhttpCache:[], _getXmlhttp:function(){ //判断是否有空闲的XMLHttp for(var i=0;i<this._xmlhttpCache.length;i++){ if(this._xmlhttpCache[i].readyState==0||this._xmlhttpCache[i]==4){ return this.xmlhttpCache[i]; } } //创建一个新的xmlhttp this._xmlhttpCache[this._xmlhttpCache.length]==Ajax.getTransport(); //返回缓存中的一个xmlhttp return this._xmlhttpCache[this._xmlhttpCache.length-1]; }, send:function(method,url,data,callback){ var xmlhttp=this._getXmlhttp(); with(xmlhttp){ try{ if(url.indexOf("?")!=-1){//防止缓存 url+="&requestTime="+(new Date()).getTime(); } else{ url+="?requestTime="+(new Date()).getTime(); } //采用异步调用的方式 open(method,url,true); //设定请求编码方式 setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8'); send(data); onreadystatechange=function(){ if(xmlhttp.readyState==4&&(xmlhttp.status==200||xmlhttp.status==304)){ //调用回调函数 callback(xmlhttp); } } } } } }
将上述代码单独保存为gd.js文件,然后需要用到它的页面将其引入即可
function ok(){ XMLHttp.send("get","http://127.0.0.....",null,gf); function gf(xmlhttp){ var msgWeclome=xmlhttp.responseText; var msg=document.getElementById("msg"); msg.innerHTML=msgWeclome; } }
Html引用代码如上,,
上述代码均为手抄,如果有错误自己检查下字段。