`

XmlHttp封装研究

阅读更多
虽然ajax有很多很牛的框架,如Prototype,DOJO,DWR,JSON,AjaxTags等等,但是,以前都是简单的使用,对其没有进行过系统的研究,如今,自己对ajax进行个系统的研究。
对于ajax的研究,首先从XmlHttp封装开始,参考各方面的资料:
ajax技术的实现主要依赖于xmlhttprequest,但我们在调用其来进行异步数据的传输时,由于xmlhttp是个短线过程(处理事件完成后就销毁)如果不对该对象进行包装处理的话,就不得不在需要调用的地方重新构建xmlhttprequest,每次调用都要写一大段的代码,实在不是个好办法。因此有必要了对xmlhttp封装,在此提供一个封装方案。
一:基本步骤
需要XMLHttpRequest对象的一个实例,要告诉它如果状态有变化该怎么做,还要告诉它向哪里发送请求以及如何发送请求,最后还需要指导XMLHttpRequest发送请求。
1.创建XMLHttpRequest对象实例
可以创建一个新实例,也可以访问包含有XMLHttpRequest实例的一个变量
2.设置onreadystatechange属性指向的函数
告诉XMLHttpRequest对象,哪个函数会处理XMLHttpRequest对象状态的改变,为此把对象的onreadystatechange属性设置为指向JavaScript函数的指针。
3.指定请求的属性
XMLHttpRequest对象的open()方法会指定发送的请求。通常,Open()方法取3个参数:一个是指示所用方法(通常是GET或POST)的串;一个是表示目标资源URL的串;一个是Boolean值,指示请求是否是异步的。
4.将请求发送给服务器
XMLHttpRequest对象的send()方法把请求发送到指定的目标资源。Send()方法接受一个参数,通常是一个串或一个DOM对象。这个参数作为请求体的一部分发送到目标URL。
二:封装细节
1.跨浏览器创建XMLHttpRequest对象
Ajax所依赖的JavaScript不是绝对统一的,在不同的浏览器中有不同的JavaScript实现,
XMLHTTPRequest在不同浏览器中的实现也有所不同,因此封装xmlhttp必须考虑浏览器问题。
XMLHttpRequest在不同的浏览器中的实现完全不同:IE中采用ActiveX Object实现,而Firefox等浏览器则采用不同的方式实现,即使是IE,因为版本的问题,也有不同的实现方式
因此,在创建XMLHttpRequest对象时,必须尽量考虑到目前已经存在的浏览器,采用更通用的方式创建XMLHttpRequest对象。下面的代码可以实现在不同的浏览器钟创建XMLHttpRequest对象:

Java代码
var xmlrequest;  
function createXMLHttpRequest()  
{  
    //对于Firefox和Opera等浏览器  
    if (window.XMLHttpRequest) {  
       xmlrequest = new XMLHttpRequest();  
    }  
    else //对于IE浏览器  
    {  
        //将IE的不同XMLHttp实现声明数组  
        var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];  
        //依次对每个XMLHTTP实现创建XMLHttpRequest对象  
        for(var i=0;i<MSXML.length;i++)  
        {  
            try 
            {  
                xmlrequest=new ActiveXObject(MSXML[i]);  
                break;  
            }  
            catch (ex) {  
            }  
        }  
    }  


var xmlrequest;
function createXMLHttpRequest()
{
//对于Firefox和Opera等浏览器
if (window.XMLHttpRequest) {
       xmlrequest = new XMLHttpRequest();
    }
    else //对于IE浏览器
    {
    //将IE的不同XMLHttp实现声明数组
    var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
    //依次对每个XMLHTTP实现创建XMLHttpRequest对象
    for(var i=0;i<MSXML.length;i++)
    {
    try
    {
    xmlrequest=new ActiveXObject(MSXML[i]);
    break;
    }
    catch (ex) {
   }
    }
    }
}


由上可以看出,上述代码依然不能保证所有浏览器都能创建xmlhttpRequest对象。

不知这种思路是否合适,恳请大家指点,知道这是以前大家研究的问题,现在请问:除了研究prototype.js等现有的框架之外大家有没有好的点子对xmlhttp进行封装?
继续中。。。。。。。。
分享到:
评论
1 楼 hax 2009-02-09  
progId方面,微软IE团队的官方blog推荐你这样写:
['MSXML2.XMLHTTP.3.0', 'Microsoft.XMLHTTP']

['Msxml2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'Microsoft.XMLHTTP']

4.0和5.0是为特殊应用准备的。
MSXML2.XMLHTTP等价于MSXML2.XMLHTTP.3.0

而且实际上,通常没有必要使用Msxml2.XMLHTTP.6.0,所以建议你使用第一种。

相关推荐

Global site tag (gtag.js) - Google Analytics