浏览 5794 次
锁定老帖子 主题:XmlHttp封装研究(初步)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (23) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-27
对于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进行封装? 继续中。。。。。。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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', ......... } } |
|
返回顶楼 | |
发表时间:2008-05-28
prototype.js也是人写的
你这代码已经够全了 |
|
返回顶楼 | |
发表时间:2008-05-28
我有个很简单的封装看 http://www.taoxueba.com/myjs
|
|
返回顶楼 | |
发表时间:2008-06-03
XmlHttp手册上说的比较清楚。
|
|
返回顶楼 | |
发表时间:2008-06-03
llchcba001 写道 XmlHttp手册上说的比较清楚。 辛苦了,谢谢,我看看 |
|
返回顶楼 | |