
var XmlHttpPool =
{
m_MaxPoolLength : 10,
m_XmlHttpPool : [],

__requestObject : function()
{
var xmlhttp = null;
var pool = this.m_XmlHttpPool;
for (var i = 0; i < pool.length; ++i)
{
if (pool[i].readyState == 4 || pool[i].readyState == 0)
{
xmlhttp = pool[i];
break;
}
}
if (xmlhttp == null)
{
return this.__extendPool();
}
return xmlhttp;
},

__extendPool : function()
{
if (this.m_XmlHttpPool.length < this.m_MaxPoolLength)
{
var xmlhttp = null;
try
{
xmlhttp = new ActiveXObject('MSXML2.XMLHTTP');
} catch(e)
{
try
{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
} catch(e2)
{
}
}
if (xmlhttp)
{
this.m_XmlHttpPool.push(xmlhttp);
}
return xmlhttp;
}
},
GetRemoteData : function(url, callback)
{
this.__receiveRemoteData(url, callback, 'GET', null);
}, 
GetRemoteDataXML : function(url, callback)
{
this.__receiveRemoteDataXML(url, callback, 'GET', null);
},
GetRemoteDataEx : function(url)
{
return this.__receiveRemoteDataEx(url, 'GET', null);
},
GetRemoteDataExXML : function(url, callback)
{
this.__receiveRemoteDataExXML(url, 'GET', null);
}, 
PostRemoteData : function(url, callback, data)
{
this.__receiveRemoteData(url, callback, 'POST', data);
}, 
PostRemoteDataXML : function(url, callback, data)
{
this.__receiveRemoteDataXML(url, callback, 'POST', data);
},
PostRemoteDataEx : function(url, data)
{
return this.__receiveRemoteDataEx(url, 'POST', data);
}, 
PostRemoteDataExXML : function(url, data)
{
return this.__receiveRemoteDataExXML(url, 'POST', data);
}, 
__receiveRemoteData : function(url, callback, httpmethod, data)
{
var xmlhttp = this.__requestObject();
if (!xmlhttp)
{
return null;
}
xmlhttp.open(httpmethod, url, true);
if (httpmethod == 'POST')
{
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete')
{
callback(xmlhttp.responseText);
}
};
xmlhttp.send(data);
},
__receiveRemoteDataEx : function(url, httpmethod, data)
{
var xmlhttp = this.__requestObject();
if (!xmlhttp)
{
return null;
}
xmlhttp.open(httpmethod, url, false);
if (httpmethod == 'POST')
{
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
xmlhttp.send(data);

if (xmlhttp.status == 200)
{
return xmlhttp.responseText;
}
return '';
},
__receiveRemoteDataXML : function(url, callback, httpmethod, data)
{
var xmlhttp = this.__requestObject();
if (!xmlhttp)
{
return null;
}
xmlhttp.open(httpmethod, url, true);
if (httpmethod == 'POST')
{
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete')
{
callback(xmlhttp.responseXML);
}
};
xmlhttp.send(data);
},
__receiveRemoteDataExXML : function(url, httpmethod, data)
{
var xmlhttp = this.__requestObject();
if (!xmlhttp)
{
return null;
}
xmlhttp.open(httpmethod, url, false);
if (httpmethod == 'POST')
{
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
xmlhttp.send(data);

if (xmlhttp.status == 200)
{
return xmlhttp.responseXML;
}
return '';
},

CancelAll : function()
{
var extendPool = this.__extendPool;
this.__extendPool = function()
{
return null;
}
for (var i = 0; i < this.m_XmlHttpPool.length; ++i)
{
this.m_XmlHttpPool[i].abort();
}
this.__extendPool = extendPool;
}
};
本文介绍了一个XMLHttpRequest连接池的实现方式,该连接池可以复用已有的请求对象来提高并发请求的效率。支持GET和POST方法,并能处理同步及异步请求。

被折叠的 条评论
为什么被折叠?



