moreAjax(仅仅是给自己看的)

本文介绍了一种利用JavaScript实现的XMLHttpRequest对象池管理方法,旨在提高AJAX请求的效率和资源利用。通过对象池复用机制,避免了频繁创建和销毁XMLHttpRequest对象带来的性能开销,并详细解释了其工作原理及如何发送请求。

 var XMLHttp = {

    _objPool: [],
    _getInstance: function ()
     {
         for (var i = 0; i < this._objPool.length; i ++)
         {
             if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4)
             {
                 return this._objPool[i];
             }
         }
        // IE5中不支持push方法
        this._objPool[this._objPool.length] = this._createObj();
         return this._objPool[this._objPool.length - 1];
     },
    _createObj: function ()
     {
         if (window.XMLHttpRequest)
         {
             var objXMLHttp = new XMLHttpRequest();
         }
         else
         {
             var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
             for(var n = 0; n < MSXML.length; n ++)
             {
                try
                {
                     var objXMLHttp = new ActiveXObject(MSXML[n]);
                     break;
                 }
                catch(e)
                 {
                 }
             }
          }          
        // mozilla某些版本没有readyState属性
        if (objXMLHttp.readyState == null)
         {
            objXMLHttp.readyState = 0;
            objXMLHttp.addEventListener("load", function ()
                 {
                    objXMLHttp.readyState = 4;
                     if (typeof objXMLHttp.onreadystatechange == "function")
                     {
                        objXMLHttp.onreadystatechange();
                     }
                 },  false);
         }
         return objXMLHttp;
     },
    // 发送请求(方法[post,get], 地址, 数据, 回调函数)
    sendReq: function (method, url, data, callback)
     {
         var objXMLHttp = 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);
             }
         }
     }
}; 
function Customer(obj)
{     
      
      var ids = obj.responseXML.getElementsByTagName("id");
   var customerNames = obj.responseXML.getElementsByTagName("customerName");
   var customerContacts = obj.responseXML.getElementsByTagName("customerContact");
   var importments=obj.responseXML.getElementsByTagName("importment");
   var mobiles=obj.responseXML.getElementsByTagName("mobile");
   var url1="";
   
       if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
         url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_window("+ ids[i].firstChild.nodeValue +",7);/" ><font color=/"blue/">"+ customerNames[i].firstChild.nodeValue+ "</font></a>(联系:<font color=/"green/">"+ customerContacts[i].firstChild.nodeValue +"</font>"+ mobiles[i].firstChild.nodeValue +")&nbsp;&nbsp;&nbsp;&nbsp;<img src=/"images/cl_xing"+ importments[i].firstChild.nodeValue  +".gif/"></li>"; 
url1+="</br>";  
   
   }  
   var customer = document.getElementById("customer"); 
     customer.innerHTML=url1;   
     }
}
function Blog(obj)
{
      var ids = obj.responseXML.getElementsByTagName("id");
      var titles = obj.responseXML.getElementsByTagName("title");
      var userNames = obj.responseXML.getElementsByTagName("userName");
      var times = obj.responseXML.getElementsByTagName("time");
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
         url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"oaBlog.do?action=show&id="+ ids[i].firstChild.nodeValue +"/" >"+ titles[i].firstChild.nodeValue+ "</a>(<a href=/"oaUser.do?action=all&userName="+ userNames[i].firstChild.nodeValue +"/"><font color=/"green/">" + userNames[i].firstChild.nodeValue +"</font></a>"+ times[i].firstChild.nodeValue +")</li>";
       url1+="</br>";         
   }  
   var blog = document.getElementById("blog"); 
     blog.innerHTML=url1;   
     }
}
function Rss(obj)
{
      var titles = obj.responseXML.getElementsByTagName("title");  
      var times = obj.responseXML.getElementsByTagName("time");
      var urls = obj.responseXML.getElementsByTagName("url");
   var url1="";  
   if(titles[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < titles.length; i++) {
       url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/""+ urls[i].firstChild.nodeValue +"/" >"+ titles[i].firstChild.nodeValue+ "</a>("+ times[i].firstChild.nodeValue +")</li>";
     url1+="</br>";
   }  
   var rss = document.getElementById("rss"); 
     rss.innerHTML=url1;   
     }
}
function Declaration(obj)
{
      var ids = obj.responseXML.getElementsByTagName("id");
      var titles = obj.responseXML.getElementsByTagName("title");
      var times = obj.responseXML.getElementsByTagName("time");
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
 
       url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_Content("+ ids[i].firstChild.nodeValue +",2);/" ><font color=/"red/">"+ titles[i].firstChild.nodeValue+ "</font></a>("+ times[i].firstChild.nodeValue +")</li>";      
     url1+="</br>";
   }  
   var declaration = document.getElementById("declaration"); 
     declaration.innerHTML=url1;   
     }
}
function Schedule(obj)
{         
      var ids = obj.responseXML.getElementsByTagName("id");
      var contents = obj.responseXML.getElementsByTagName("content");
      var remindtimes = obj.responseXML.getElementsByTagName("remindtime");
      var starttimes = obj.responseXML.getElementsByTagName("starttime");
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
 
        url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_Schedule("+ ids[i].firstChild.nodeValue +",0);/" >"+ contents[i].firstChild.nodeValue+ "</a>("+ remindtimes[i].firstChild.nodeValue +")</li>";         
      url1+="</br>";
    }  
   var schedule = document.getElementById("schedule"); 
     schedule.innerHTML=url1;   
     }
}
function Message(obj)
 {
//      window.alert(obj.statusText);
      var ids = obj.responseXML.getElementsByTagName("id"); 
      var fromUserNames = obj.responseXML.getElementsByTagName("fromUserName");
      var contents = obj.responseXML.getElementsByTagName("content");
      var times = obj.responseXML.getElementsByTagName("time");
//      window.alert(ids.length);
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
               
       }
       else{
   for(var i = 0; i < ids.length; i++) {
         url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_message("+ ids[i].firstChild.nodeValue +",0);/" >"+ contents[i].firstChild.nodeValue+ "</a>(<a href=/"oaUser.do?action=all&userName="+ fromUserNames[i].firstChild.nodeValue +"/"><font color=/"green/">"+ fromUserNames[i].firstChild.nodeValue +"</font></a>"+ times[i].firstChild.nodeValue +")</li>";  
     url1+="</br>";
      
   }  
   var message = document.getElementById("message"); 
     message.innerHTML=url1;   
     }
}
function Petition(obj)
{
      var ids = obj.responseXML.getElementsByTagName("id");    
      var states = obj.responseXML.getElementsByTagName("state");
      var contents = obj.responseXML.getElementsByTagName("content");
      var titles = obj.responseXML.getElementsByTagName("title");
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
            
            url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_news("+ ids[i].firstChild.nodeValue +",0);/" >" + titles[i].firstChild.nodeValue;
              if(ids[i].firstChild.nodeValue==0)
                  url1+="(等待批准)</li>";   
           else  if(ids[i].firstChild.nodeValue==1)
                  url1+="(<font color=/"green/">已批准</font>)</li>";
           else   
                 url1+="(<font color=/"red/">未批准</font>)</li>";
                 url1+="</br>";
   }  
   var petition = document.getElementById("petition"); 
     petition.innerHTML=url1;   
     }
}
function Order(obj)        
{
      var ids = obj.responseXML.getElementsByTagName("id");  
      var fromUserNames = obj.responseXML.getElementsByTagName("fromUserName");
      var contents = obj.responseXML.getElementsByTagName("content");
      var times = obj.responseXML.getElementsByTagName("time");
   var url1="";
   if(ids[0].firstChild.nodeValue==0){
       }
       else{
   for(var i = 0; i < ids.length; i++) {
          url1+="<li class=/"td6/"><img src=/"images/xs_2.gif/"/><a href=/"javascript:open_order("+ ids[i].firstChild.nodeValue +",2);/" >"+ contents[i].firstChild.nodeValue+ "</a>(<font color=/"green/">"+ fromUserNames[i].firstChild.nodeValue+"</font>" + times[i].firstChild.nodeValue +")</li>";  
        url1+="</br>";
   }  
   var order = document.getElementById("order"); 
     order.innerHTML=url1;   
      }
}
function Schedule_remind(){
     var url="oaSchedule.do?action=get";
createXMLHttpRequest();
XMLHttpReq.open("GET", url, true);
XMLHttpReq.onreadystatechange = processResponse;
XMLHttpReq.send(null);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值