【转载】XMLHTTPRequest对象原理介绍与应用
XMLHTTPRequest最早是由微软IE5作为ActiveXObecjt对象引入的,引入这个东西的目的就是能向服务器发送异步请求,但这一对象直到Ajax技术的出现才真正有了用武之地,而其它浏览器厂商也认识到这一对象的重要性,纷纷引入但不是作为ActiveXObject对象引入,而是作为一个标准的浏览器对象引入的,现在IE7,IE8微软已经修正作为一个标准的浏览器对象引入,而且W3C组织也可能要把它标准化。所以以后我们的代码可能不会写成 Var xmlhttp = new ActiveXObject(“Miscrosoft.XMLHTTP”);而直接写成var xmlhttp=new XMLHTTPRequest();那么说到这XMLHTTPRequest到底是什么,可以怎么用?如果你了解http协议这个问题就很好理解,就目前来讲所有的web的应用都是基于http协议的,这个协议规定了请求与响应一方应遵守的标准,只要满足这个标准就可以通信,例如我们建一个form然后填写信息提交到服务器,等待服务器处理,这个过程的实质其实就是浏览器把我们的请求包括form中的信息格式化成一个标准http协议的请求报头和请求正文,然后传送给服务器,我们一般都是这么干的,实质上XMLHTTPRequest也能这么干,也能格式化请求并发送请求而且还能返回服务器响应的内容。这也正是ajax应用的本质所在:只取客户端关心的数据,而不必回送整个页面,实现了无刷新的效果!那么XMLHTTPRequest是怎么干的呢?下面就介绍一下XMLHTTPRequest这个对象的方法和属性,并告诉你它是怎么干的。
场景:我想找个人帮我问李四:王五回家没有? 步骤1:var xmlhttp = new XMLHTTPRequest(); //实例化一个XMLHTTPRequest对象 比喻:找“张三”帮我做这个事,但现在张三只知道要帮我问话。
步骤2:xmlhttp.onreadystatechane=callback;//注册回调函数 比喻:张三带个手机,好告诉进展。
步骤3:xmlhttp.open(“get/post”,URL,isAsyn,username,password)5个参数。 get/post:采用哪种方法 URL请求的URL,同步或異步(true异步,默认值),username验证的用户名,password对应的密码,后两个参数可选,第三个参数省略用默认值 //初始化http请求,并准备发送请求 比喻:我现在告诉张三(xmlhttp)去问李四(URL). 采用get方向则直接是url?问话=王五回家没有, 采用post则我把“问话=王五回家没有”写到纸条上并告诉李四你要问的就是纸上的问题。如何选择同步意味着我必须等到张三回来我才能走开干其它的事,如果选择异常我吩咐完就干我自己的事了,等张三回来告诉我结果就行了。 后面两个参数,如果李四不信任张三是我派去的,就会要求张三提供“暗号”,不然拒绝回答!张三已经准备好,准备出发了!
步骤4、xmlhttp.send(null);若采用post方式写成xmlhttp.send(data) 场景:张三快去吧!张三已经出发了。
场景5、function callback() { If(xmlhttp.state==4&&xmlhttp.status==200) Alert(xmlhttp.responseText);//问的结果 } xmlhttp.responseText 表示服务器端的响应为简单文本,即普通字符串。 场景:收到李四的回答! 但在场景5中为什么有判断,4代码什么,200又代码什么,因为张三去做这件事的时候还有其它状态,张三去问了在回来的路上和张三回来了。张三回来了就是4代码数据接收完成。200又代码什么呢,因为还有其它情况,例如张三没找到李四:404错误。 张三找到李四,李四说不清楚(没法处理),李四病了虽然知道说不了话(服务端不能正确响应请求),所以200代码李四没出现其它情况,是OK的。所以要加个判断!
说到这应该差不多明白了吧.下面就简单列举一下方法和属性及事件! 方法: abort方法,忽略xmlhttp对象,重新回到未初始化状态,也意味着终止请求。 open方法,初始化请求。 send发送请求。 setRequestHead设置请求的报头。例如请求的编码格式,就像告诉李四张三说的是英语你不能按照中文理解。 getResponseHead获取响应的指定报头。 getAllResponseHead获取响应的全部报头。 属性: readystate状态就是描述张三是什么状态了,5个值,从0开始。0张三还不知道干啥事。 1知道干啥事了,还没去。2已经去了 3,回来了还没到。4回来了并且已经到了。 status存放响应的状态码。 statusText存放响应状态码的简短描述。 responseText存放响应的文本,以文本方式存放。 responseXML存放响应的XML文档模式对象,如果返回的是文本些值为null. onreadystatechange注册回调处理函数。 事件: onreadystatechange事件当state状态发生改变时触发,即调用注册的回调函数处理! 转载自: http://hi.baidu.com/liuxinhuahao/blog/item/2d1a77eff54a68f3b2fb95da.html |