XMLHttpRequest(XHR)

一、基本介绍

XMLHttpRequest对象是XMLHttp组件的对象,它是一个抽象对象,允许脚本从服务器获取返回的XML数据或将数据发送到服务器端。
在XMLHttpRequest对象与服务器交互的操作,对用户来说是透明的,在使用XMLHttpRequest与服务器传递数据的过程中,用户的其他操作不受任何影响。
因此,XMLHttpRequest可以实现客户端与服务器只进行数据层面的交互,不必每次都刷新页面,可以减轻服务器的数据处理压力及服务器与客户端的数据传输压力,同时又可以提高客户体验。

XMLHttpRequest最早在Microsoft Internet Explorer 5.0中作为一个ActiveX控件提供。
随着XMLHttpRequest的广泛应用,Mozilla、Opera等浏览器也提供XMLHttpRequest的实例。
在使用XMLHttpRequest发送请求和处理响应之前,应先创建一个XMLHttpRequest对象。
由于XMLHttpRequest不是W3C的标准,因此可以采用多种方法用JavaScript来创建XMLHttpRequest的实例。
在Internet Explorer中,XMLHttpRequest实现为一个ActiveX控件,在其他浏览器(如Firefox、Opera等)中,则实现为一个内置JavaScript对象。

在JavaScript中创建通用XMLHttpRequest对象的方法如下:

 1 var xmlHttp; //XMLHttpRequest对象
2 function createXMLHttpRequest() {
3 if(window.ActiveXObject) { //Internet Explorer浏览器
4 try {
5 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); //创建ActiveX对象
6 } catch(e) {
7 try {
8 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
9 } catch(e) {
10 window.alert("创建XMLHttpRequest对象错误"+e);
11 }
12 }
13 } else if(window.XMLHttpRequest) { //Mozilla等浏览器
14 xmlHttp = new XMLHttpRequest(); //使用内置对象创建XMLHttpRequest
15 }
16 if(!(xmlHttp)) { //异常,创建对象失败
17 window.alert("创建XMLHttpRequest异常!");
18 }
19 }

二、XHR注入

XHR 注入技术是通过XMLHttpRest来获取javascript的。
但与eval不同的是,该机制是通过创建一个script的DOM元素,然后把XMLHttpRequest的响应注入script中来执行javascript的。
在某些情况下使用eval可能比这样机制慢。
XHR injection 通过XMLHttpRequest获取的内容必须部署在和主页相同的域中。
以下是XHR Injection的列子源码: 

 1   var xhrObj=getXHRObject();
2   xhrObj.onreadystatechange=
3   function(){
4   if(xhrObj.readyState==4){
5   var scriptElem=document.createElement('script');
6   document.getElementsByTagName('head')[0].appendChild(ScriptElem);
7   scriptElem.text=xhrObj.responseText;
8   }
9   };
10   xhrObj.open('Get','A.js',true);//必须和主页面在同一个域中
11   xhrObj.send('');


三、参考资料:
http://book.51cto.com/art/200810/91484.htm
http://baike.baidu.com/view/3993796.htm

另,XMLHttpRequest更详细介绍请参阅:

http://www.blogjava.net/swingboat/archive/2005/12/30/26028.aspx

 

 

posted @ 2012-01-11 23:24  万法自然~  阅读(651)  评论(0)    收藏  举报