浅析Ajax的四种开发模式
作者:李咏琪
来源:《科技创新导报》2011年第01
        :Ajax的主要特点在于异步交互,更新web页面的局部信息。本文分析了Ajax的实现原理,通过实例介绍了Ajax常用的四种开发模式。
        关键词:异步交互Ajax开发模式
        中图分类号:TP393.02 文献标识码:A 文章编号:1674-098X(2011)01(a)-0028-02
        在传统的web应用中,用户使用浏览器浏览网页,浏览器等待刷新发送ajax请求的步骤,当网页刷新很慢时,屏幕内容一片空白,用户只能在屏幕前等待浏览器的响应。这是因为传统的web应用采用同步交互过程,即用户首先向服务器发送一个请求,服务器接收到用户的请求后开始执行用户请求的操作,最后将结果返回给浏览器。在服务器处理时,用户只能等待。这是一种不连贯的用户体验。
        当负载较小时,这种方式没有体现出什么问题。可是当负载较大时,响应时间可能比较长,用户等待时间也较长。另外,有时用户只需要更新页面的部分数据,而不需要更新整个页面。在软
件设计越来越人性化的时候,我们应该通过一定的方法来改进用户体验。由此产生了异步的工作方式。例如在输入表单时,在异步的工作方式下,当用户输入部分内容的时候,服务器可以先检查输入的内容。异步交互、局部更新正是Ajax可以实现的功能。
        1 Ajax的实现原理
        Ajax应用程序的加载和传统的web应用程序没什么区别:首先,某个用户操作引发了浏览器的一次HTTP请求。然后服务器处理这个请求。生成合适的HTMLCSS以及Javascript,并发送至客户端。最后,客户端浏览器将这一段HTML显示出来。
        随后,用户在该Ajax页面上的后续操作将和传统web页面完全不同。用户的操作将不会引发浏览器的另一次HTTP请求,取而代之的是将引发客户端的某段JavaScript代码的执行。一次用户操作的全过程可以分为7个步骤:
        (1)用户在页面上执行了某个操作,例如点击某个按钮等;
        (2)根据用户的操作,页面发出相应的DHTML事件;
        (3)调用注册到该DHTML事件的客户端JavaScript事件处理函数,其中初始化了一个用以向服务器发送异步请求的XMLHttpRequest对象,同时指定一个回调函数,当服务器端的响应返回时,将自动调用该回调函数;
        (4)服务器收到XMLHttpRequest对象的请求后,开始根据请求进行一系列的处理;
        (5)处理完毕,服务器返回客户端所需要的数据;
        (6)数据到达客户端之后,执行JavaScript回调函数,并根据返回的数据对用户界面进行更新。
        (7)用户看到界面的变化。
        在整个过程中,用户并没有被阻塞,依然可以浏览当前页面的其他部分,甚至还可以再引发事件并触发另一个与服务器的异步交互过程。这种模式即非阻塞的异步通信模式,在用户体验方面有很大的进步。
        2 Ajax的开发模式
        目前,Ajax技术没有统一的开发模式。不同的开发模式针对不同的Ajax项目在实现上有一些差别。下面介绍Ajax常见的四种开发模式。
        2.1 XMLHTTP+WebForms
        XMLHTTP+WebForms是使用Ajax技术进行web应用开发的最基本方法。在这种模式下,通过JavaScript去操作XMLHttpRequest对象,发送异步请求到服务器端。另一方面,在服务器端可以直接接受XMLHttpRequest的请求。并根据请求进行相对应的处理,处理完成后返回相应的执行结果给XMLHttpRequest对象。最后再直接使用JavaScript语言代码将返回的结果显示出来。下面用这种方法实现一个输入小写字母,点击按钮,转换为大写字母输出的页面。如图 1所示。
        主要代码如下:
        (1) 客户端
        客户端里创建XMLHttpRequest对象以及发起异步请求、回调处理。
        创建XMLHttpRequest对象。
        varxmlHttp=null;
        function creatXMLHTTP()
        {
        //根据浏览器的不同,创建XMLHttpRequest对象。
        }
        发起异步请求。
        function sendRequest(url)
        {creatXMLHTTP();
        xmlHttp.open("GET",url,true);
        adystatechange=httpStateChange; //指定响应函数
        xmlHttp.send(null);//发送请求
        }
        回调处理函数。
        functionhttpStateChange(){
        adyState==4){//判断对象状态
        if(xmlHttp.status==200)//信息已经成功返回、开始处理信息
        {sponseText;
        sult.value=a;//显示服务器传回的信息
        } else{
        window.alert("异常");
        }}}
        functionusercheck()
        {
        vartest=stmsg.value;
        if(test=="")
        {window.alert("输入不能为空");
        returnfalse;}
        else{
        varurl="ajax.aspx?test="+test;
        sendRequest(url)
        }
        页面上的控件代码如下:
        提交给ajax.aspx页面
        (2)服务器端
        服务器端就是一个WebForm,接受客户端传递的参数然后将其转化为大写后返回给客户端。本例中WebFormajax.aspx
        protected void Page_Load(object sender, EventArgs e){
        if (!IsPostBack){
        string test = Request.QueryString["test"].ToString().Trim();
        string result = test.ToUpper();
        Response.Write(result);
        Response.Flush();
        Response.End();
        }}
        2.2 XMLHTTP+HttpHandler
        XMLHTTP+HttpHandler模式与XMLHTTP+WebForms模式相比,客户端的实现并没有变化,还是直接使用JavaScript语言代码操作XMLHTTP对象,但在服务器端已经改用HttpHandler接收和处理异步请求。下面用这种方式来实现小写转大写的例子。
        (1)客户端
        在上面的例子中只需要更改发送请求函数的url。主要代码如下:
        function sendRequest(){
        creatXMLHTTP();
        var url="hello.ashx?name="+ElementById(‘testmsg’).value;
        xmlHttp.open("GET",url,true);
        adystatechange=onSuccessCallBack;
        xmlHttp.send(null);
        }
        (2)服务器端
        服务器端编写一般处理程序文件hello.ashx,代码如下:
        public class hello: IHttpHandler{
        public void ProcessRequest(HttpContext context){
        context.Response.ContentType="text/plain";
        string name=context.Request.QueryString["name"];
        context.Response.Write(name.ToUpper());}
        public bool IsReusable{
        get{
        return false;}}}
        2.3 CallBack
        CallBackASP.NET 2.0新增的开发方式。它要求页面实现ICallbackEventHandler接口。ASP.NET的回调,就是使用ICallbackEventHandler接口。它包括两个方法:RaiseCallbackEvent0方法执行对异步请求的服务器端处理;GetCallBackResult0方法返回异步请求的处理结果。通过实现RaiseCallbackEvent()GetCallbackResult()方法来实现回调,最后通过调用ClientScript.GetCallbackEventReference()方法实现Ajax效果。下面用这种方式来实现小写转大写的例子。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。