`
yuzihan607
  • 浏览: 21138 次
  • 性别: Icon_minigender_1
  • 来自: 雅安
社区版块
存档分类
最新评论

dojo入门3_XHR对象

    博客分类:
  • dojo
阅读更多
传统的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对象是不是更强大了呢


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics