SimpleAjax 开发包 v3.1 (简单的Ajax)  
Ajax技术从此不再神秘...
SimpleAjax v3.1版新功能与变动(2007年11月19日): 
  1、就是改了一下示例下面那四个test方法。
  2、更改了版权,由原来的成长痕迹软件开发团队改成MudCMS开发团队 ^_^。
  3、在Readme里为版本加上了更新时间。
 
 
以往版本: 
  SimpleAjax v3.0版(2006年还在读书时编写)
1、使RequestItem有两种类型,一种是受管理的,一种是游离的,使用isManaged方法来判断他是否是受管理的。
2、为SimpleAjax类添加了createRequestItem静态方法,该方法创建的RequestItem对象是游离的,游离的RequestItem用于进行同步请求。
3、为SimpleAjax类添加了getResponse静态方法,该方法把同步请求过程简单化。
SimpleAjax v2.1版(2006年还在读书
    
http://www.mudcms.com  欢迎进入我们的cms技术讨论论坛。 
下载: http://bbs.mudcms.com/showtopic-13.aspx
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
SimpleAjax 开发包 v3.1 (简单的Ajax)
MudCMS开发团队   碳元素
http://www.mudcms.com
Ajax技术从此不再神秘...
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
    
        
            | 说明: | 
        
            |  | 
        
            | 
                
                    
                        |  | 表示不需要用、不建议用或不能用的属性、事件或方法。因为核心代码是javascript,大家也知道javascript是弱类型的语言,这里所讲的属性、事件和方法只是看起来类似,但并不真正可以完全做到面向对象,比如限制访问,所以此开发包中很多方法只是给程序内部使用的,但用户也能访问。这里做特别说明:说明是不需要用、不建议用或不能用的属性、事件或方法大家就不要用了。
 |  | 
        
            | 说明: | 
        
            | 
                
                    
                        |  | 为了尽可能的避免命名冲突,本开发包中只有一个SimpleAjax是可能会与别人冲突的,其他的类、属性、事件、方法都放在SimpleAjax下面,所以你可以看到RequestItem类全称是SimpleAjax.RequestItem类. |  | 
        
            | SimpleAjax v3.1版新功能与变动(2007年11月19日): | 
        
            | 
                
                    
                        |  | 1、就是改了一下示例下面那四个test方法。2、更改了版权,由原来的成长痕迹软件开发团队改成MudCMS开发团队 ^_^。
 3、在Readme里为版本加上了更新时间。
 |  | 
        
            | 以往版本: | 
        
            | 
                
                    
                        |  | SimpleAjax v3.0版(2006年还在读书时编写)1、使RequestItem有两种类型,一种是受管理的,一种是游离的,使用isManaged方法来判断他是否是受管理的。
 2、为SimpleAjax类添加了createRequestItem静态方法,该方法创建的RequestItem对象是游离的,游离的RequestItem用于进行同步请求。
 3、为SimpleAjax类添加了getResponse静态方法,该方法把同步请求过程简单化。
 SimpleAjax v2.1版(2006年还在读书时编写)1、支持了Msxml.XMLHTTP、Msxml2.XMLHTTP、Msxml2.XMLHTTP.3.0、Msxml2.XMLHTTP.6.0、Msxml2.XMLHTTP.7.0、Msxml3.XMLHTTP
 2、向Opera、Firefox浏览器兼容
 3、新增了testAjax()方法,用于测试环境是否支持Ajax
 SimpleAjax v2.0版(2006年还在读书时编写)1、支持了 Msxml2.XMLHTTP.5.0
 2、新增的ArrayList类代替Scripting.Dictionary做为键值对,以向更多环境兼容
 3、受管理的Querystring
 4、可以以POST方式发送Form
 5、对解决中文问题的部分支持
 SimpleAjax v1.0版(2006年还在读书时编写)最初的版本,主要解决的问题是为每一个请求都指定了一个ID,以方便在全局跟踪。
 另外就是引入OOP来简化Ajax的开发流程,其中有三个事件说明了这一点。
 |  | 
        
            | 参考: | 
        
            |  | 
        
            |  | 
        
            |  | 
    
SimpleAjax类
    
        
            | 方法 | 
        
            | 
                
                    
                        | public SimpleAjax(name) | 
                            
                                
                                    | return | SimpleAjax | 返回SimpleAjax对象 |  
                                    | name | string | 引用的名字.比如:var aa = SimpleAjax("aa");很无聊的一个参数吧~没办法~这是必须的~内部机制需要 |  | 构造函数.不建议使用该构造函数,因为一个页面中有一个这样的对象就行了,我已经在js文件中构造了一个simpleAjax(被称之为固有对象)了,直接使用就行了. |  
                        | public SimpleAjax.RequestItem createRequestItem() | 
                            
                                
                                    | return | SimpleAjax.RequestItem | 返回SimpleAjax.RequestItem对象 |  | 创建一个请求项.新创建的请求项会被存放到SimpleAjax对象中.在这之后,还会触发SimpleAjax的onCreate事件.如果创建失败会返回false。 该方法创建的RequestItem是受管理的。可以进行同步和异步请求(同步的我没试过行不行,理论上是可以的)。
 |  
                        | public SimpleAjax.RequestItem getRequestItem(key) | 
                            
                                
                                    | return | SimpleAjax.RequestItem | 返回SimpleAjax.RequestItem对象 |  
                                    | key | string | 预得到的RequestItem的key |  | 根据传入的key,得到存放在SimpleAjax中的请求项. |  
                        | public void removeRequestItem(key) | 
                            
                                
                                    | return | void | 无返回值 |  
                                    | key | string | 预移除的Requestitem的key |  | 根据传入的key,移除存放在SimpleAjax中的请求项.在这之后,还会触发SimpleAjax的onDispose事件 |  
                        | public int getRequestItemsLength() |  | 返回SimpleAjax中存放请求项的个数,如果只求个数,比getRequestItems()方法生成数组后再求得个数要快. |  
                        | public Array getRequestItemKeys() |  | 返回的数组中包括所有请求项的Key,你可以遍历该数组来访问所有的Key。 注意,请不要修改此返回的数组
 |  
                        | public string getRequestItemKeys(index) | 
                            
                                
                                    | return | string | 返回字符串表示的Key |  
                                    | index | int | 索引 |  | 根据传入的索引,返回对应的Key |  
                        | public Array getRequestItemValues() |  | 返回的数组中包括所有的请求项,你可以遍历该数组来访问所有的请求项。 |  
                        | public string getRequestItemValues(index) | 
                            
                                
                                    | return | string | 返回字符串表示的Key |  
                                    | index | int | 索引 |  | 根据传入的索引,返回对应的请求项。 |  
                        | public static boolean testAjax() |  | 测试是否支持Ajax |  
                        | private static XMLHttpRequest createRequest() | 
                            
                                
                                    | return | XMLHttpRequest | 返回XMLHttpRequest对象 |  | 产生一个新的XMLHttpRequest对象.主要是做多种浏览器兼容处理.如果创建失败会返回false |  
                        | private static string newId() |  | 产生一个新的ID.这个ID几乎是没有重复出现的可能的,用此方法生成的ID用来设置请求项的key. |  
                        | public static boolean testStream() | 
                            
                                
                                    | return | boolean | 返回true表示stream可用,false不可用 |  | 测试ActiveXObject("adodb.stream")是否可用 |  
                        | public static string bytesToBstr(body,cset) | 
                            
                                
                                    | return | string | 返回字符串 |  
                                    | body | binary | 一般用XMLHttpRequest对象的responseBody属性传入 |  
                                    | cset | string | 指定编码,如:gbk,bg2312,utf8等... |  | 使用该方法需要stream组件支持,所以最好先用testStream方法测试一下.该方法用于解决中文问题,你可以指定任意的输出编码.但由于需stream组件的支持,所以还是不建议使用. |  
                        | public static SimpleAjax.RequestItem createRequestItem() | 
                            
                                
                                    | return | SimpleAjax.RequestItem | 返回SimpleAjax.RequestItem对象 |  | 创建一个请求项.创建失败会返回false。 该方法创建的RequestItem是游离的。只能进行同步请求,这也是他存在的意义(同步的方式比起异步的方式要简单和易理解得多,当然代价就是失去异步优势,需要合理权衡)。
 |  
                        | public static SimpleAjax.RequestItem. Response getResponse(url) | 
                            
                                
                                    | return | SimpleAjax.RequestItem.Response | 返回SimpleAjax.RequestItem. Response对象 |  
                                    | url | string | 指定的URL |  | 创建一个游离的请求项,以同步的方式请求指定的URL。并返回请求的结果Response对象。该方法把同步请求过程简单化。 |  | 
        
            | 属性 | 
        
            | 
                
                    
                        | private string name | SimpleAjax的name.应该要与SimpleAjax对象的引用名字是一样的.比如固有对象simpleAjax的name属性应该是"simpleAjax". |  
                        | private ArrayList _requestItems | 一个集合,其实SimpleAjax所有的请求项都存在这个集合中.请不要直接操作这个对象,否则能导致的后果太多了. |  | 
        
            | 事件 | 
        
            | 
                
                    
                        | public event onCreate(ri) | 
                            
                                
                                    | ri | SimpleAjax.RequestItem | 被创建的RequestItem |  | 发生在RequestItem创建时 |  
                        | private event _onDone(ri) | 
                            
                                
                                    | ri | SimpleAjax.RequestItem | 得到响应的RequestItem |  | 发生在onDone之前.主要是过滤XMLHttpRequest.readyState!=4的情况 |  
                        | public event onDone(ri) | 
                            
                                
                                    | ri | SimpleAjax.RequestItem | 得到响应的RequestItem |  | 发生在RequestItem的请求得到响应后 |  
                        | public event onDispose(key) | 
                            
                                
                                    | key | string | 被释放内存的RequestItem的key |  | 发生在RequestItem释放内存后 |  | 
    
SimpleAjax.RequestItem类 (请求项) 
    
        
            | 方法 | 
        
            | 
                
                    
                        | public SimpleAjax.RequestItem() | 
                            
                                
                                    | return | SimpleAjax.RequestItem | 返回SimpleAjax.RequestItem对象 |  | 构造函数.请勿使用该构造函数,要构造该对象可以使用SimpleAjax的createRequestItem()方法 |  
                        | public boolean isManaged() |  | RequestItem有两种类型,一种是受管理的,一种是游离的,使用isManaged方法来判断他是否是受管理的。 |  
                        | public SimpleAjax getSimpleAjax() | 
                            
                                
                                    | return | SimpleAjax | 返回SimpleAjax对象 |  | 得到该RequestItem所在的SimpleAjax对象 |  
                        | public void setUrl(url[,buildupArray][,list1][,list2]...) | 
                            
                                
                                    | return | void | 无 |  
                                    | url | string | 要设置的url |  
                                    | buildupArray | string | 是否构成数组,可选值: BUILDUP          在出现重复键时,没有明确指定不构成数组的键将构成数组,默认值
 NOTBUILDUP 在出现重复键时,没有明确指定构成数组的键将不构成数组(即使原来的值是数组),后出现的值将覆盖前面的值
 AUTO                在出现重复键时,原来的值为数组的将构成数组,原来的值为空或为字符串的将不构成数组
 |  
                                    | list1,list2... | string | 明确指定的键列表 |  | 你可以给url属性赋值,但url问号后面的参数不会被管理也不会被发送到服务端.使用此方法给url属性赋值,url问号后面的参数会被管理也会被发送到服务端 |  
                        | public string getUrl([type]) | 
                            
                                
                                    | return | string | 返回的url |  
                                    | type | string | 返回url的类型,可选值: ONLY          仅页面url,即没有问号后面的参数,默认值
 ALL             全部url,即包括问号后面的参数
 ORIGINAL 原始url,即返回你在给url属性赋值时给的值,或在调用setUrl时给的url参数
 |  | 你可以取url属性的值,但取到的值等价于getUrl("ORIGINAL").使用该方法取url,你可以得到一个仅页面的url,或是得到从受管理Querystring中提取出参数的完整url |  
                        | public void send() |  | 发送该请求项.只有调用此方法发送请求项,才有可能收到响应.在收到响应时,会触发SimpleAjax的_onDone事件和onDone事件 |  
                        | public static void setUrl_buildupArray(list ,key ,newValue [,buildupArray]) | 
                            
                                
                                    | return | void | 无返回值 |  
                                    | list | ArrayList | 一个受管理的Querystring |  
                                    | key | string | 键名 |  
                                    | newValue | string | 要放入的值 |  
                                    | buildupArray | string | 放入方式,即是否构成数组,可选值: BUILDUP          在出现重复键时,构成数组,默认值
 NOTBUILDUP 即使出现重复键,也不构成数组(即使原来的值是数组),后出现的值将覆盖前面的值
 AUTO                在出现重复键时,原来的值为数组的将构成数组,原来的值为空或为字符串的将不构成数组
 |  | 把{newValue}值放入到{list}中key为{key}的键值对中。buildupArray决定了放入方式,这里的放入方式与setUrl方法中的放入方式有一点出入,这里没有明确指定构成或不构成的名单 setUrl方法里调用了该方法
 |  
                        | public static string getQuerystringString(querystring) | 
                            
                                
                                    | return | string | 返回受管理Querystring组成的字符串 |  
                                    | querystring | ArrayList | 一个受管理的Querystring |  | 传入受管理的Querystring,返回可以向服务器发送的URL问号后面的字符串 send方法和getUrl方法调用了该方法
 |  
                        | public static string getFormString(form) | 
                            
                                
                                    | return | string | 返回表单组成的字符串 |  
                                    | form | Form | 一个Form表单 |  | 传入一个表单,返回可以向服务器发送的URL问号后面的字符串 send方法调用了该方法
 |  | 
        
            | 属性 | 
        
            | 
                
                    
                        | public string key | 该请求项的Key |  
                        | private string name | 请求项所属的SimpleAjax的name.要得到所属的SimpleAjax,可以使用getSimpleAjax()方法,用不着此属性了. |  
                        | private XMLHttpRequest request | XMLHttpRequest对象,Ajax的核心. 不建议直接调用里面的方法或属性
 |  
                        | public SimpleAjax.RequestItem.Response response | 响应管理对象.你可以使用response==null来判断是否有响应返回(不过这一般是没有必要的,因为在onDone事件里就一定不等于null) 该属性用于管理响应,现在要取得响应字符串,你可以使用ri.response.getText()方法,而不建议使用ri.request.responseText属性了.
 请参考SimpleAjax.RquestItem.Response类
 |  
                        | publilc ArrayList querystring | 受管理Querystring.这是一个很迷人的功能,所有的querystring都被管理起来了,你不用再去使用该死的+号来连接这些参数.现在你只需要在集合里添加一个成员,就等于添加了一人参数 例:ri.querystring.set("action","add"); ri.querystring.set("id","5");
 等价于原来的 url+="?" + "action" + "=" + "add" + "&" ; url+= "id" + "=" + "5";
 显然受管理的Querystring看起来健壮多了,在调用send方法时,send方法会取出受管理Querystring中的键值对组成请求字符串再发送请求
 |  
                        | public Form form | 表单.在调用send方法时,如果form不为null则会以POST方式发送请求,并且会把该表单提交到服务端 |  
                        | public ArrayList args | (注:该集合与querystring几乎一样,不同的是querystring会提交到服务器,而该集合不会) 参数集合,可以在该集合里放入多个参数,这是一个主要的扩展功能.
 因为你在一个页面中可能需要N个请求,而XMLHttpRequest对象在得到响应后,到了响应函数中你应该是没有办法分辨是哪个XMLHttpRequest对象的响应(除非你不同的请求调不同的函数,或在被请求页面中做工作,以便借助返回信息来分辨是哪个XMLHttpRequest对象).
 而现在你可以在响应函数(在这里被我称之为"事件")中接到一个参数(这要多谢key属性,才能让我把这个往服务器跑了一圈的家伙认出来,并抓来当做参数传入),这个参数就是存放着XMLHttpRequest对象的RequestItem对象,你可以从该对象的args集合属性中取任意一个之前你安排成员来分辨他们了.
 例:ri.args.set("cmd","getOrderDetails"); 那么 ri.args.get("cmd")=="getOrderDetails";
 |  
                        | public string url | 要请求的url |  
                        | public boolean async | 是否异步,默认为true |  
                        | public string user | 如果请求的资源需要验证身份,user属性指定用户名 |  
                        | public string password | 如果请求的资源需要验证身份,password属性指定密码 |  | 
    
SimpleAjax.RequestItem.Response类 (响应类,用于管理响应) 
    
        
            | 方法 | 
        
            | 
                
                    
                        | public SimpleAjax.RequestItem.Response(ri) | 
                            
                                
                                    | return | SimpleAjax.RequestItem.Response | 返回响应对象 |  
                                    | ri | SimpleAjax.RequestItem | 指定属于哪个请求的响应 |  | 构造函数.不建议使用,有响应返回时,_onDemo事件会调用此构造函数构建一个响应对象 |  
                        | public string getText() |  | 得到响应的字符串 |  
                        | public string getTextFromStream(cset) | 
                            
                                
                                    | return | string | 响应的字符串 |  
                                    | cset | string | 指定编码,如:gbk,bg2312,utf8等... |  | 按指定编码输出响应字符串,但由于需要stream组件的支持,不建议使用 |  
                        | public DOM getXML() |  | 得到XML文档对象 |  
                        | public binary getBody() |  | 得到二进制数据 |  
                        | public stream getStream() |  | 得到流 |  | 
        
            | 属性 | 
        
            | 
                
                    
                        | private RequestItem requestItem |  |  
                        | private XMLHttpRequest request |  |  
                        | public int status | http状态码 |  
                        | public string statusText | http状态的文本形式 |  
                        | public string headersString | http头全部内容的文本形式 |  
                        | public ArrayList headers | 受管理的http头,你可以遍历所有的http头或仅读出一个头的内容,请参考ArrayList类 |  | 
    
ArrayList类 (键值对,用于代替Scripting.Dictionary对象) 
    
        
            | 方法 | 
        
            | 
                
                    
                        | public ArrayList() | 
                            
                                
                                    | return | ArrayList | 返回ArrayList对象 |  | 构造函数. |  
                        | public Object get(key) | 
                            
                                
                                    | return | Object | 值/对象 |  
                                    | key | string | 键 |  | 根据传入的key,得到对应的值/对象 |  
                        | public void set(key,value) | 
                            
                                
                                    | return | void | 无 |  
                                    | key | string | 键 |  
                                    | value | Object | 值/对象 |  | 根据传入的key,设置对应的值/对象 |  
                        | public void remove(key) | 
                            
                                
                                    | return | void | 无 |  
                                    | key | string | 键 |  | 根据传入的key,移除对应的值/对象 |  
                        | public void crear() |  | 清空集合 |  
                        | public boolean exists(key) | 
                            
                                
                                    | return | boolean | true表示存在,false表示不存在 |  
                                    | key | string | 预检检测是否存在的键 |  | 根据传入的key,检测对应的值/对象是否存在于集合中。注意,如果值/对象不存在集合中,使用get方法会返回null,但存在于集合中也有可能存在返回null(因为值正好是null),这时可以使用该方法判断值/对象是否存在于集合中。 |  
                        | public Array keys() |  | 返回一个数组,数组中包函所有key |  
                        | public Object keys(index) | 
                            
                                
                                    | return | string | 键 |  
                                    | index | int | 索引 |  | 根据传入的索引,返回对应的键 |  
                        | public Array values() |  | 返回一个数组,数组中包函所有值/对象 |  
                        | public Object values(index) | 
                            
                                
                                    | return | Object | 值/对象 |  
                                    | index | int | 索引 |  | 根据传入的索引,返回对应的值/对象 |  
                        | public ArrayList clone() | 
                            
                                
                                    | return | ArrayList | 克隆的ArrayList |  | 克隆一个同样的ArrayList |  | 
        
            | 属性 | 
        
            | 
                
                    
                        | public int length | 集合中的成员总数 |  | 
    
附:XMLHttpRequest对象参考
    
        
            | 方法 | 
        
            | 
                
                    
                        | abort() |  | 停止当前请求 |  
                        | getAllResponseHeaders() | 
                            
                                
                                    | return | string | 作为字符串返回完整的header |  | 作为字符串返回完整的header |  
                        | getResponseHeader(headerLabel) | 
                            
                                
                                    | return | string | 作为字符串返回单个的header |  
                                    | headerLabel | string | 指定header的标签 |  | 根据传入的headerLabel找到指定的header,作为字符串返回 |  
                        | open(method,url [,asyncFlag] [,userName] [,password]) | 
                            
                                
                                    | return | void | 无返回值 |  
                                    | method | string | 设置请求的方式,三个可选值:HEAD、POST、GET
 |  
                                    | url | string | 设置要请求的url |  
                                    | asyncFlag | boolean | 可选,默认为true.是否异步连接.此处为Ajax的关键. |  
                                    | userName | string | 可选,设置访问目标url所使用的用户对应的用户名 |  
                                    | password | string | 可选,设置访问目标url所使用的用户对应的密码 |  | 设置未决的请求的目标URL,方法和其它参数 |  
                        | send(content) | 
                            
                                
                                    | return | void | 无返回值 |  
                                    | content | object | 发送的内容 |  | 发送请求 |  
                        | setRequestHeader(label,value) | 
                            
                                
                                    | return | void | 无返回值 |  
                                    | label | string | 指定header的标签 |  
                                    | value | string | 为header指定值 |  | 设置header并和请求一起发送 |  | 
        
            | 属性 | 
        
            | 
                
                    
                        | onreadystatechange | 状态改变的事件触发器 |  
                        | readyState | 对象状态:0="未初使化"、1="读取中"、2="已读取"、3="交互中"、4="完成". |  
                        | responseText | 服务器返回数据的文本版本 |  
                        | responseXML | 服务器返回数据的XML版本.此属性为兼容DOM的XML文档对象. |  
                        | responseBody | 以unsigned array格式表示直接从服务器返回的未经解码的二进制数据 |  
                        | responseStream | 以Ado Stream对象的形式返回响应信息 |  
                        | status | 服务器返回的状态码,如:404="文件未找到"、200="成功" |  
                        | statusText | 服务器返回的状态文本 |  | 
    
.