关于这个类的主要功能如下:
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 }