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
浙公网安备 33010602011771号