XMLHttpRequest对象池

如果采用和服务器每交互一次就新建一个XMLHttpRequest对象的方式,则会很耗费客户端的内存。
实现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引用代码如上,,

上述代码均为手抄,如果有错误自己检查下字段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值