dojo入门3_XHR对象
传统的ajax使用javascript的话是非常麻烦的,还需要考虑到各个浏览器的不同,而使用dojo便可以帮我们屏蔽这一差异,它会根据不同的浏览器创建相适应的XmlHttpRequest对象(以后简称XHR),创建原始XHR对象的代码是
function createXHR(){
if (window.XMLHttpRequest) { // Non IE
return new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
XHR 对象创建方式不一致是 Dojo 的 XHR 框架诞生的一个原因,更重要的原因是原始 XHR 对象还不够强大,有些方面不能满足开发的需要:首先 XHR 对象支持的返回类型有限,原始 XHR 对象只有 responseText 和 responseXML 两个属性代表返回的数据,重要的数据交换格式 JSON 就不被支持;其次不能设置 HTTP Request 的超时时间,设置超时时间可以让客户端脚本控制请求存在的时间,而不是被动的等待服务器端的返回。
由于这些问题的存在,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(){
var http = null;
var last_e = null;
if(!dojo.isIE || !djConfig.ieForceActiveXXhr){
try{ http = new XMLHttpRequest(); }catch(e){}
}
if(!http){
for(var i=0; i<3; ++i){
var progid = dojo._XMLHTTP_PROGIDS[i];
try{
http = new ActiveXObject(progid);
}catch(e){
last_e = e;
}
if(http){
dojo._XMLHTTP_PROGIDS = [progid];
break;
}
}
}
if(!http){
throw new Error("XMLHTTP not available: "+last_e);
}
return http; // XMLHTTPRequest instance
}
大家可以看到,里面有很多的try catch语句,是为了保证在创建XHR对象的时候,即使出错,浏览器也不会崩溃,这样的XHR对象是不是更强大了呢