论坛首页 Web前端技术论坛

XmlHttp封装研究(初步)

浏览 5794 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (23) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-27  
虽然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对象:

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进行封装?
继续中。。。。。。。。
   发表时间:2008-05-28  
DWR中的

  if (batch.rpcType == dwr.engine.XMLHttpRequest) {
    if (window.XMLHttpRequest) {
      batch.req = new XMLHttpRequest();
    }
    // IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
    else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
      batch.req = dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);//  此处即是你的那个var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', .........
    }
  }
0 请登录后投票
   发表时间:2008-05-28  
prototype.js也是人写的
你这代码已经够全了
0 请登录后投票
   发表时间:2008-05-28  
我有个很简单的封装看 http://www.taoxueba.com/myjs
0 请登录后投票
   发表时间:2008-06-03  
XmlHttp手册上说的比较清楚。
0 请登录后投票
   发表时间:2008-06-03  
llchcba001 写道
XmlHttp手册上说的比较清楚。

辛苦了,谢谢,我看看
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics