dojo入门3_XHR对象

88264154 2011-09-27

传统的ajax使用javascript的话是非常麻烦的,还需要考虑到各个浏览器的不同,而使用dojo便可以帮我们屏蔽这一差异,它会根据不同的浏览器创建相适应的XmlHttpRequest对象(以后简称XHR),创建原始XHR对象的代码是

functioncreateXHR(){

if(window.XMLHttpRequest){//NonIE

returnnewXMLHttpRequest();

}

elseif(window.ActiveXObject){//IE

returnnewActiveXObject("Microsoft.XMLHTTP");

}

}

XHR对象创建方式不一致是Dojo的XHR框架诞生的一个原因,更重要的原因是原始XHR对象还不够强大,有些方面不能满足开发的需要:首先XHR对象支持的返回类型有限,原始XHR对象只有responseText和responseXML两个属性代表返回的数据,重要的数据交换格式JSON就不被支持;其次不能设置HTTPRequest的超时时间,设置超时时间可以让客户端脚本控制请求存在的时间,而不是被动的等待服务器端的返回。

由于这些问题的存在,dojo组织了一系列的函数来支持不同的Http请求,如xhrGet,rawXhrPost,xhrPut,rawXhrPut,xhrPut,xhrDelete,这几个函数与HTTP协议中的四种请求是一一对应的,HTTP四种请求是:Get(读取),Post(更新),Put(创建),Delete(删除),这些跟XHR对象相关的函数组织在一起就形成了XHR框架,一下是dojo创建XHR对象的片段

d._XMLHTTP_PROGIDS=['Msxml2.XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.4.0'];

d._xhrObj=function(){

varhttp=null;

varlast_e=null;

if(!dojo.isIE||!djConfig.ieForceActiveXXhr){

try{http=newXMLHttpRequest();}catch(e){}

}

if(!http){

for(vari=0;i<3;++i){

varprogid=dojo._XMLHTTP_PROGIDS[i];

try{

http=newActiveXObject(progid);

}catch(e){

last_e=e;

}

if(http){

dojo._XMLHTTP_PROGIDS=[progid];

break;

}

}

}

if(!http){

thrownewError("XMLHTTPnotavailable:"+last_e);

}

returnhttp;//XMLHTTPRequestinstance

}

大家可以看到,里面有很多的trycatch语句,是为了保证在创建XHR对象的时候,即使出错,浏览器也不会崩溃,这样的XHR对象是不是更强大了呢

相关推荐