梅开二度 激情超越

~~常用激扬的句子去激励自己的学生,为什么自己却莫名的沉沦了!~~

一个简单实用的Ajax通用类

关于这个类的主要功能如下:
1.兼容各种浏览器的高低版本

2.解决IE浏览器的缓存问题

3.建立了一个XMLHttp对象回收容器,当有空闲的对象的时候就调用,否则就重新创建一个,不会造成资源浪费

4.建立了一个XMLHttp对象通道,如果指定了对象的通道名字,那么当第二次调用该通道的对象时,一旦该通道仍然处于请求状态,函数将停止运行

对于这个类的使用十分的简单,示例如下:
var url = 'http://www.applelife.cn';
var data = '';
var callback = function back(obj){ alert(obj.responseText); }
Request.reSend(url,data,callback);

上面的前2个参数是必须的,其他的可选

url 代表发送请求的页面地址

data 代表发送的内容,如果为""则采用GET方式,否则为POST

callback 是回调函数,它的参数就一个XMLHttp对象。如果你的后台页面生成的是XML格式,就采用obj.responseXML;如果生成的是字符串,就采用obj.responseText

介绍下第四个参数chunnel
当一个页面的某个版块需要频繁的发送XMLHttp请求的话,如果上次发送的请求还没完成,下次请求又使用另外一个XMLHttp对象发送的话,这样就造成的XMLHttp请求的重叠,对于网络资源是比较大的消耗;或者你想这个版块的XMLHttp请求按照顺序的一个个发送;

这时chunnel就起到作用了,设定通道的名字,一旦上次的请求还没完成,那么这次reSend函数将停止退出,示例如下:

var url = 'http://www.applelife.cn';
var data = '';
var callback = function back(obj){ alert(obj.responseText); }
var chunnel = 'apple';
var timer = setInterval( 'Request.reSend(url,data,callback,chunnel)', 1000);

目前的功能不太多,以后有时间会逐渐增加进一步完善,如果您发现BUG欢迎指导.


  1  //  ajaxClass -- XMLHttp Object Pool and XMLHttp chunnel Pool
  2  //  == written by Apple <zysp322@gmail.com> ===
  3  //  == Copyright (C) 2006 Apple Blog -  http://www.applelife.cn  ==
  4 
  5 
  6  var Request  =   new  function()  {
  7 
  8  this .pool  =   new  Array();
  9 
 10  this .getXMLHttp  =  function (chunnel)
 11    {
 12    
 13   if (chunnel  !=   null )
 14     {
 15    for  (var a  =   0 ; a  <   this .pool.length; a ++ )
 16      {
 17     if ( this .pool[a][ " chunnel " ]  ==  chunnel)
 18       {
 19      if ( this .pool[a][ " obj " ].readyState  ==   0   ||   this .pool[a][ " obj " ].readyState  ==   4 )
 20        {
 21       return   this .pool[a][ " obj " ];
 22     }
 23      else 
 24        {
 25        return   " busy " ;
 26     }
 27    }
 28   }
 29  
 30    this .pool[ this .pool.length]  =   new  Array();
 31    this .pool[ this .pool.length  -   1 ][ " obj " ]  =   this .createXMLHttp();
 32    this .pool[ this .pool.length  -   1 ][ " chunnel " ]  =  chunnel;
 33    return   this .pool[ this .pool.length  -   1 ][ " obj " ];
 34 
 35  }
 36    
 37   for  (var i  =   0 ; i  <   this .pool.length; i ++ )
 38     {
 39    if  ( this .pool[i][ " obj " ].readyState  ==   0   ||   this .pool[i][ " obj " ].readyState  ==   4 )
 40      {
 41     return   this .pool[i][ " obj " ];
 42   }
 43  }
 44 
 45   this .pool[ this .pool.length]  =   new  Array();
 46   this .pool[ this .pool.length  -   1 ][ " obj " ]  =   this .createXMLHttp();
 47   this .pool[ this .pool.length  -   1 ][ " chunnel " ]  =   "" ;
 48   return   this .pool[ this .pool.length  -   1 ][ " obj " ];
 49 
 50 }
 51 
 52  this .createXMLHttp  =  function ()
 53    {
 54 
 55   if (window.XMLHttpRequest)
 56     {
 57   var xmlObj  =   new  XMLHttpRequest();
 58  } 
 59   else 
 60     {
 61   var MSXML  =  [ ' Microsoft.XMLHTTP ' ,  ' MSXML2.XMLHTTP.5.0 ' ,  ' MSXML2.XMLHTTP.4.0 ' ,  ' MSXML2.XMLHTTP.3.0 ' ,  ' MSXML2.XMLHTTP ' ];
 62    for (var n  =   0 ; n  <  MSXML.length; n ++ )
 63      {
 64     try
 65       {
 66     var xmlObj  =   new  ActiveXObject(MSXML[n]);       
 67      break ;
 68    }
 69     catch (e)
 70       {
 71    }
 72   }
 73  } 
 74 
 75   return  xmlObj;
 76 
 77 }
 78 
 79  this .reSend  =  function (url,data,callback,chunnel)
 80    {
 81  var objXMLHttp  =   this .getXMLHttp(chunnel)
 82 
 83   if (typeof(objXMLHttp)  !=   " object " )
 84     {
 85     return  ;
 86  }
 87 
 88  url  +=  (url.indexOf( " ? " )  >=   0 )  ?   " &nowtime= "   +   new  Date().getTime() :  " ?nowtime= "   +   new  Date().getTime();
 89 
 90   if (data  ==   "" )
 91     {
 92   objXMLHttp.open( ' GET '  , url,  true );
 93   objXMLHttp.send( '' );
 94  }
 95   else 
 96     {
 97   objXMLHttp.open( ' POST '  , url,  true );
 98   objXMLHttp.setRequestHeader( " Content-Length " ,data.length);
 99   objXMLHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded " );
100   objXMLHttp.send(data);
101  }
102 
103   if (typeof(callback)  ==   " function "  )
104     {
105   objXMLHttp.onreadystatechange  =  function ()
106      {
107     if  (objXMLHttp.readyState  ==   4 )
108       {
109      if (objXMLHttp.status  ==   200   ||  objXMLHttp.status  ==   304 )
110        {
111      callback(objXMLHttp)
112     }
113      else
114        {
115      alert( " Error loading page\n " +  objXMLHttp.status  + " : " +  objXMLHttp.statusText);
116     }
117    }
118   }
119  }
120 
121 }
122 
123 }

posted on 2006-12-08 23:14 梅开二度 激情超越 阅读(79) 评论(0)  编辑 收藏 引用 网摘 所属分类: AJAX


只有注册用户登录后才能发表评论。

My Links

Blog Stats

留言簿(3)

随笔分类(22)

随笔档案(21)

文章分类(48)

文章档案(44)

相册

收藏夹(40)

Favorite site

My Friends

搜索

最新评论