YUI Research -- Connection Manager module

来源:互联网 发布:淘宝下载安装免费 编辑:程序博客网 时间:2024/06/10 00:58
 YAHOO.util.Connect XMLHttpRequest的封装,关注跨浏览器和请求状态等问题

YAHOO.util.Connect.asyncRequest(method, uri, callback, postData)
发起异步请求
初始化默认的头信息;
触发startEvent。

YAHOO.util.Connect.setForm(formId, isUpload, secureUri)
收集表单中的字段信息构造字符串
如果isUpload==true,创建iframe;
如果遇到select元素,则遍历它的options,找到selected==true的option;在IE,用option.attributes['value'].specified,其他用option.hasAttribute('value')判断是否设置了value属性,如果没设置则用text代替value进行字符串组合;
radio和checkbox都是用checked判断

如果是submit而且是第一个检测到的submit:如果
_hasSubmitListener存在,则取_submitElementValue中的值填入字符串,否则,把它的name和value加入字符串。就是说如果在加载的时候_hasSubmitListener===false,表单中第一个被检测到的submit的值会被提交。_hasSubmitListener主要用户解决一个表单中有多个submit的情况。
YAHOO.util.Connect.abort(o, callback, isTimeout) 中断一个请求事务
在XHR的事务中,清楚readystate和事务timeout定时器;
在上传文件事务中,清楚iframe和timeout定时器;
如果上面的清楚操作成功,则触发abortEvent,并调用
handleTransactionResponse生成返回对象。

YAHOO.util.Connect.isCallInProgress(o) 判断请求事务是否还在进行中
在XHR请求的事务中,如果o.conn还没被构析,而且o.conn.readystate!=0而!=4,则返回true;
在上传文件事务中,如果用于上传的iframe还没被删除,则返回true;
其他情况返回false。

YAHOO.util.Connect.createFrame(secureUri) 创建用于上传的iframe
创建的iframe的id为‘yuiIO’+_transaction_id;
在IE中不能设置通过createElement创建的对象的属性;
在IE的SSL环境中不设置iframe的src属性会抛出安全异常;
把iframe设置绝对布局,并把它设为坐标[-1000,-1000];
把加到body所有子元素的末尾。

YAHOO.util.Connect.appendPostData(postData) 在upload的时候把postData转化为hidden字段插入_formNode

YAHOO.util.Connect.uploadFile(o, callback, uri, postData) 上传文件表单
把表单原本的action、method和target保存起来,然后把它们分别设置成uri、post和新创建的iframe
屏蔽了IE的**oding和其他的entype,并把它们设置成
multipart/form-data
调用appendPostData设置表单数据,然后提交表单;


YAHOO.util.Connect._hasSubmitListener 是否已经注册的检测submit事件的处理器
模块加载时执行一匿名方法,此方法判断Event模块是否已加载成功,如果加载成功,则在document上注册一个监听click的事件,如果事件的 target.type="submit",则把_submitElementValue设置为target.name+"="+ target.value,并返回true;否则返回false。

YAHOO.util.Connect.createXhrObject(transactionId) 构造一个XHR对象
在非IE浏览器中,使用XMLHttpRequest;
在IE中,使用ActiveXObject。ActiveXObject构造方法参数的值定义在数组_msxml_progid中,可以通过setProgId(id)把新值置于_msxml_progid前端。

YAHOO.util.Connect.getConnectionObject(isFileUpload) 构造一个有效连接对象
如果isFileUpload==false,调用createXhrObject并返回其结果;
否则,构造一个空对象并设置他的tId为_transaction_id和isUpload为true;
_transaction_id++。

YAHOO.util.Connect.initCustomEvents(o, callback) 订阅局部事件
创建的局部事件会保存在o中,在连接的整个周期中,会先触发全局事件,再触发局部事件

YAHOO.util.Connect.handleReadyState(o, callback) 处理连接状态
创建一个定时器监听o.conn.readyState==4的状态;

o.conn.readyState==4,触发completeEvent,并调用handleTransactionResponse
定时器默认值为50,可通过setPollingInterval设置。(为啥不用onreadystatechange呢?)

YAHOO.util.Connect.handleTransactionResponse(o, callback, isAbort) 处理返回结果并判断事务是否成功
如果callback==null,条用releaseObject并返回;
如果200<=o.conn.status<=300或==1223,则执行事务正确处理,触发successEvent;
否则执行错误处理并触发failureEvent。

YAHOO.util.Connect.createResponseObject(o, callbackArg) 创建返回对象
装配连接头信息和其他相关属性。

YAHOO.util.Connect.createExceptionObject(o, callbackArg, isAbort) 创建异常对象
如果是通讯错误,o.status=0;
如果是命令中断,o.status=1。

YAHOO.util.Connect.initHeader(label, value, isDefault) 保存头信息
如果有相同的label头信息存在,则在它的值前加上新值和逗号。

YAHOO.util.Connect.setProgId(id) 添加ActiveX的签名

YAHOO.util.Connect.setDefaultPostHeader(b) 设置是否使用默认的Post方法头信息
默认的Post方法头信息为'application/x-www-form-url**oded; charset=UTF-8'

YAHOO.util.Connect.setDefaultXhrHeader(b) 设置是否使用默认的异步请求头信息
默认的异步请求头信息为'XMLHttpRequest'

YAHOO.util.Connect.setHeader(o) 把保存起来的头信息设置在o.conn中

YAHOO.util.Connect.releaseObject(o) 构析连接对象

YAHOO.util.Connect.resetFormState() 重置与表单有关的状态
重置_isFormSubmit、_isFileUpload、_formNode和_sFormData。

YAHOO.util.Connect.resetDefaultHeaders() 重置默认头信息
包括_has_default_headers=false和_default_headers={}。


原创粉丝点击