`

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,所以建议你使用第一种。

相关推荐

    易语言测试XMLHTTP版本

    在实际应用中,易语言的XMLHTTP版本可能会有所不同,可能包含了一些特定的优化或者对API的封装,使得在易语言环境中使用更加方便。通过分析提供的"易语言测试XMLHTTP版本源码",我们可以更深入地理解这种实现方式,...

    易语言源码XMLHTTP方式访问网页.rar

    由于易语言本身并不内置XMLHTTP的支持,开发者需要使用第三方模块或者自行封装API来实现这一功能。这个压缩包中的源码很可能是通过这样的方式实现的。 XMLHTTP的主要操作包括: 1. **创建XMLHTTP对象**:在易语言...

    易语言XMLHTTP类模块源码-易语言

    通过研究和实践,我们可以利用这个模块开发出各种基于Web的应用,如实时数据监控、网页爬虫等。对于初学者来说,这是一个很好的学习资源,因为它将复杂的网络通信过程进行了简化,便于理解和掌握。

    原生js仿jquery实现对Ajax的封装

    在JavaScript的世界里,jQuery库因其简洁的语法和强大的功能而广受欢迎,特别是在处理DOM操作、事件处理和Ajax请求等方面。...通过实践和研究,开发者可以进一步优化和扩展这个封装,使其更符合个人或项目的需求。

    易语言360文件鉴定器

    "XMLhttp读文件"是指使用XMLHttpRequest对象(在易语言中可能有特定的封装)进行异步HTTP请求,从远程服务器获取文件内容。这在鉴定过程中可能是用于获取远程数据库中的病毒库更新或进行在线查询。XMLhttp技术使得...

    基于SOA的实时股票行情数据集成研究 (2014年)

    具体实现过程包括构造SOAP封装包,以XMLHTTP方式发送请求至远程WebService接口,然后Web服务器接收并处理返回的XML数据,最终将处理后的数据绑定到网页的特定位置。 关键词: 1. SOA(面向服务架构):这是一种软件...

    一个实现网页的自动post的程序源代码

    与GET方法不同,GET在URL中附带数据,而POST将数据封装在请求体中,更适合于处理大量或敏感的数据,因为它们不会显示在浏览器的历史记录或书签中。 在VB中实现网页自动POST,主要涉及以下步骤: 1. **创建HTTP...

    易语言访问路由器源码-易语言

    在易语言中,".ec"是类库文件的扩展名,它封装了一些功能,方便开发者在主程序中调用。这个彗星XMLHTTP类可能提供了发送HTTP请求、接收响应、解析XML数据等方法,是连接到路由器并获取或设置其配置信息的关键。 ...

    易语言POST注册QQ源码-易语言

    POST请求将这些信息封装在请求体中,然后发送到服务器进行处理。在这个源码中,易语言被用来实现这一功能,让程序能够模拟用户填写表单并提交的过程。 XMLHTTPzcqq.e文件很可能是易语言编写的一个模块或程序,其中...

    VB智能搜索引擎提交程序.7z

    在编程领域,源码是理解软件工作原理的关键,而VB源码对于学习和研究VB编程语言的开发者来说尤其宝贵。 VB(Visual Basic)是由微软公司推出的一种面向对象的编程语言,它沿用了Basic语言的简洁语法,同时加入了...

    Flex地球玩家源代码(www.earthplayer.com)

    4. 数据访问层:这部分代码涉及与服务器的通信,可能包括XMLHTTP请求、AMF(Action Message Format)数据交换等,用于获取和更新地理信息数据。 四、源代码解析 在地球玩家源代码中,主要关注以下几个部分: 1. 主...

    Excel-VBA宏编程实例源代码-获取网络信息.zip

    通过深入研究"获取网络信息.xlsm"中的源代码,我们可以学习到如何在VBA环境中实现网络通信,这对于自动化处理网络数据的Excel应用是非常有价值的。同时,这也将提升我们在办公自动化领域的技能,使我们能够创建更...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法,可以自动交换信息,W3C宣称,使用RDF配合数字签名,将使网络中存在"真实可信"的电子商务。 六.显示 单独用XMl不能显示页面,...

    基于ASP的xml 留言本 v1.0.zip

    【ASP技术详解】 ASP(Active Server Pages)是微软公司推出的一种...通过深入研究这个项目,开发者可以进一步掌握ASP的编程技巧,理解XML在实际应用中的重要作用,以及如何在ASP环境中有效地处理和呈现XML数据。

    eclipse下DWR源代码

    【DWR(Direct Web Remoting)】是一种Java框架,它使得Web应用能够使用Ajax...通过深入研究Eclipse下的DWR源代码,开发者不仅可以了解Ajax的基本原理,还能掌握如何在实际项目中有效利用DWR,提升Web应用的交互体验。

Global site tag (gtag.js) - Google Analytics