Running...
技术成就梦想

       开发基于Ajax的web应用需要编写大量的Javascript代码,而就目前的情况而言,Javescript的调试还缺少一个比较好的集成环境。为了减轻Ajax开发的复杂度,可以使用一些已有的Ajax开发框架,既提高了开发效率,也减少了代码出错的概率。现在市面上已经有很多框架可用,但如果只是开发比较小的项目,完全可以自己编写一个简单的框架,这样效率可能会更高。
      下面我将通过对XMLHttpRequest对象的封装,创建一个简单的Ajax框架。
      首先,需要创建一个XMLHttpRequest对象实例。 
       
function AjaxFrameDemo()
{
   
this.XmlHttp = this.CreatHttpObject();
}

AjaxFrameDemo.prototype.CreatHttpObject 
= function()
{
   
var xmlhttp;
   
try
   {
      xmlhttp 
= new ActiveXObject("Msxml2.XMLHTTP");
   }
   
catch (e)
   {
      
try
      {
         xmlhttp 
= new ActiveXObject("Microsoft.XMLHTTP");
      }
      
catch(e)
      {
            xmlhttp 
= new XMLHttpRequest();
      }
   }
   
return xmlhttp;

      这段代码针对不同的浏览器使用了不同的创建方法,保证了程序的兼容性。

      接下来需要创建一个方法实现对web服务器的异步请求。   
     
AjaxFrameDemo.prototype.CallBack = function(url)
{
   
if(this.xmlhttp)
   {
      
if(this.xmlhttp.readyState==4||this.xmlhttp.readyState==0)
      {
         
this.xmlhttp.open('post',url);
         
this.xmlhttp.onreadystatechange=function()
         {
            
this.ReadyStateChange();
         }
         
this.xmlhttp.send(null);
      }
   }
}

AjaxFrameDemo.prototype.ReadyStateChange 
= function()
{
    
if(this.xmlhttp.readyState==1)
    {
       
this.OnLoading();
    }
    
else if(this.xmlhttp.readyState==2)
    {
       
this.OnLoaded();
    }
    
else if(this.xmlhttp.readyState==3)
    {
       
this.OnInteractive();
    }
    
else if(this.xmlhttp.readyState==4)
    {
       
if(this.xmlhttp.status==0)
         
this.OnAbort();
       
else if(this.xmlhttp.status==200 && this.xmlhttp.statusText=="ok")
         
this.OnComplete();
       
else 
         
this.OnError();           
    }
}

      这段代码中OnLoading等方法皆设定为空函数,只需给出声明,使用时可根据需要进行重写。

      由于框架使用原型创建对象,实际应用时可以重写其中的部分属性与方法来完成不同项目的需求。另外,该部分只是完成了客户端的框架设计,还需要在服务器端增加一个C#类,读取HTTP请求并返回响应,有兴趣的朋友可自行完成。

小结:
这个Ajax框架结构比较简单,只是完成了最基本的Ajax功能,使用时可根据需要自行扩展,适用于比较小的项目开发。
posted on 2007-04-07 01:56  saintbird  阅读(845)  评论(0编辑  收藏  举报