建一个XMLHttpRequest对象池
建一个XMLHttpRequest对象池
发布时间:2016-12-29 来源:查字典编辑
摘要:作者:legend出处:http://www.ugia.cn/?p=85在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XML...

作者:legend

出处:http://www.ugia.cn/?p=85

在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。

下面是我最近写的一个简单的类:

复制代码 代码如下:

/**

*XMLHttpRequestObjectPool

*

*@authorlegend<legendsky@hotmail.com>

*@linkhttp://www.ugia.cn/?p=85

*@Copyrightwww.ugia.cn

*/

varXMLHttp={

_objPool:[],

_getInstance:function()

{

for(vari=0;i<this._objPool.length;i++)

{

if(this._objPool[i].readyState==0||this._objPool[i].readyState==4)

{

returnthis._objPool[i];

}

}

//IE5中不支持push方法

this._objPool[this._objPool.length]=this._createObj();

returnthis._objPool[this._objPool.length-1];

},

_createObj:function()

{

if(window.XMLHttpRequest)

{

varobjXMLHttp=newXMLHttpRequest();

}

else

{

varMSXML=['MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];

for(varn=0;n<MSXML.length;n++)

{

try

{

varobjXMLHttp=newActiveXObject(MSXML[n]);

break;

}

catch(e)

{

}

}

}

//mozilla某些版本没有readyState属性

if(objXMLHttp.readyState==null)

{

objXMLHttp.readyState=0;

objXMLHttp.addEventListener("load",function()

{

objXMLHttp.readyState=4;

if(typeofobjXMLHttp.onreadystatechange=="function")

{

objXMLHttp.onreadystatechange();

}

},false);

}

returnobjXMLHttp;

},

//发送请求(方法[post,get],地址,数据,回调函数)

sendReq:function(method,url,data,callback)

{

varobjXMLHttp=this._getInstance();

with(objXMLHttp)

{

try

{

//加随机数防止缓存

if(url.indexOf("?")>0)

{

url+="&randnum="+Math.random();

}

else

{

url+="?randnum="+Math.random();

}

open(method,url,true);

//设定请求编码方式

setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');

send(data);

onreadystatechange=function()

{

if(objXMLHttp.readyState==4&&(objXMLHttp.status==200||objXMLHttp.status==304))

{

callback(objXMLHttp);

}

}

}

catch(e)

{

alert(e);

}

}

}

};

示例:

复制代码 代码如下:

<scripttype="text/javascript"src="xmlhttp.js"></script>

<scripttype="text/javascript">

functiontest(obj)

{

alert(obj.statusText);

}

XMLHttp.sendReq('GET','http://www.ugia.cn/wp-data/test.htm','',test);

XMLHttp.sendReq('GET','http://www.ugia.cn/wp-data/test.htm','',test);

XMLHttp.sendReq('GET','http://www.ugia.cn/wp-data/test.htm','',test);

XMLHttp.sendReq('GET','http://www.ugia.cn/wp-data/test.htm','',test);

alert('Poollength:'+XMLHttp._objPool.length);

</script>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新AJAX相关学习
热门AJAX相关学习
编程开发子分类