Ajax应用示例: XMLHttpRequest封装

XMLHttpRequest封装在HttpClient.js文件内,代码如下:
    function HttpClient(){}  
      
    HttpClient.prototype={  
            //传给open方法的GET或者POST类型  
            requestType: 'GET',  
              
            //设置为TRUE时将发生异步调用  ,false时为同步调用
            isAsync: false,  
            
            //指定XMLHttpRequest返回的是文本对象还是XML文档对象
            isGetXML: false,
              
            //保存XMLHttpRequest实例的地方  
            xmlhttp: false,  
              
            //发送了一个成功的异步调用后将调用的内容  
            callback: false,  
              
            //当调用XMLHttpRequest的send方法时将调用的内容  
            //自定义  ,不用的话注释掉即可。
            onSend: function(){  
                document.getElementById("HttpClientStatus").style.display='block';  
            },  
              
            //当readyState的值为4时将调用的内容,在回调函数之前进行  
            //自定义    ,不用的话注释掉即可。
            onLoad: function(){  
                document.getElementById("HttpClientStatus").style.display='none';  
            },  
              
            //当出现http错误时将调用的内容  
            onError: function(error){  
                alert(error);  
            },  
              
            //实例化一个xmlhttpclient  
            init: function(){  
                try{  //对于Firefox和Opera等浏览器
                      this.xmlhttp=new XMLHttpRequest();
                      //有此版本的Mozilla浏览器在处理服务器返回的包含XML mime-type头部信息内容时会出错。  
                      //所以,为了确保返回内容是text/xml信息,需要包含下面的语句。  
                      if(xmlrequest.overrideMimeType)  
                      {  
                           xmlrequest.overrideMimeType("text/xml");  
                      }  
                }catch(e){  //对于IE浏览器
                    var XMLHTTP_IDS=new Array('Msxml2.XMLHTTP.7.0',  
					                          'Msxml2.XMLHTTP.6.0', 
					                    	  'Msxml2.XMLHTTP.5.0',  
                                              'Msxml2.XMLHTTP.4.0',  
                                              'Msxml2.XMLHTTP.3.0',  
                                              'Msxml2.XMLHTTP',  
                                              'Micrsoft.XMLHTTP');  
                    var success=false;  
                    for(var i=0;i<XMLHTTP_IDS.length && !success;i++){  
                        try{  
                            this.xmlhttp=new ActiveXObject(XMLHTTP_IDS[i]);  
                            success=true;  
                            break;
                        }catch(e){  
                              
                        }  
                          
                    }  
                    if(!success){  
                        this.onError('Unable to create XMLHttpRequest.');  
                    }  
                }  
            },  
              
            //用来处理readyState改变的内部方法  
            _readyStateChangeCallback: function(){  
                  
                switch(this.xmlhttp.readyState){  
                case 2: this.onSend();break;  
                case 4:   
                    this.onLoad();  
                    if(this.xmlhttp.status==200){  
                    	if(this.isGetXML)
                    		this.callback( this.xmlhttp.responseXML); 
                    	else
                    		this.callback(this.xmlhttp.responseText);  
                    }else{  
                        this.onError('HTTP ERROR MAKING REQUEST: '+  
                                      '['+this.xmlhttp.status+']'+  
                                      this.xmlhttp.statusText);  
                    }  
                    break;  
                }  
            },  
              
            //发起页面请求的方法  
            //@ url,字符串型,为请求的页面  
            //@ playload ,字符串型,如果是post请求就需要  
            makeRequest: function(url,payload){  
                  
                if(!this.xmlhttp){  
                    this.init();                      
                }  
                try{  
                this.xmlhttp.open(this.requestType,url,this.isAsync);  
                }catch(e){  
                    alert('error');  
                }  
                var self=this;  
                  
                this.xmlhttp.onreadystatechange=function(){  
                    //回调函数
                    self._readyStateChangeCallback();  
                }  
                  
                this.xmlhttp.send(payload);  
                  
                if(!this.isAsync){  
                	if(this.isGetXML)
                		return this.xmlhttp.responseXML;  
                	else
                		return this.xmlhttp.responseText;  
                }  
            }  
    }  


要读取的xml文件,a.xml如下:

<html>
<head>
	<title>Hello, Ajax!</title>
</head>
<body>I am there.</body>
</html>

HTML页面实现功能:可以以返回XML文档对象或者返回文件对象的形式,读取a.xml的内容并显示在当前页面内;代码如下:
<!DOCTYPE html>
<html>  
  <head>  
    <title>HttpClientTest</title>     
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>  
  <script type="text/javascript" src="HttpClient.js" mce_src="HttpClient.js"></script>  
  <script type="text/javascript" >
  var client=new HttpClient();  
  client.isAsync=true;  
  client.isGetXML=false;
    
  function test(){  
    
      client.callback=function(result){  

	/*      //isGetXML设置为true时,返回的是XML文档对象
	      var title = result.getElementsByTagName("title")[0].childNodes[0].nodeValue;  
	      alert(title); 
	      document.getElementById('target').innerHTML=title;  */
	      
	      //isGetXML设置为false时,返回的是文本
	      alert(result); 
	      document.getElementById('target').innerHTML=result; 
      }  
        
      client.makeRequest('a.xml',null);  
        
  }  
 </script>  
  <body>  
    <div id="HttpClientStatus" style="display:block" mce_style="display:none">Loading....</div>  
    <a href="javascript:test()" mce_href="javascript:test()"> Make an Async Test call</a>  
    <div id='target'></div>  
</body>  
</html> 

文章参考自:http://blog.csdn.net/bianzhiqi/article/details/4640700

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值