AJAX 精辟 的 工具

本文介绍了一个XMLHttpRequest连接池的实现方式,该连接池可以复用已有的请求对象来提高并发请求的效率。支持GET和POST方法,并能处理同步及异步请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }

}
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值